Multi-module Spring Boot ingest service for vehicle telemetry. Modules: - ingest-api / ingest-core / ingest-codec-common: shared SPI, dispatcher, Disruptor event bus, BCC/BCD codec helpers - protocol-gb32960: GB/T 32960.3 inbound (Netty + per-version parser packages v2016/v2025), platform login auth, VIN whitelist, idle handler - protocol-jt808 / protocol-jt1078 / protocol-jsatl12: JT/T inbound - inbound-mqtt / inbound-xinda-push: alternative ingest channels - session-core: per-channel session state - sink-archive / sink-mq: persistence sinks (local file / Kafka) - command-gateway: terminal control command gateway - bootstrap-all: aggregator Spring Boot app - observability: Micrometer / Actuator wiring Includes hex-dump golden samples under protocol-gb32960/src/test/resources and the GB/T 32960.3-2016 / 2025 reference PDFs under reference/. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
131 lines
4.5 KiB
YAML
131 lines
4.5 KiB
YAML
spring:
|
||
application:
|
||
name: lingniu-vehicle-ingest
|
||
threads:
|
||
virtual:
|
||
enabled: true
|
||
|
||
server:
|
||
port: 20000
|
||
|
||
lingniu:
|
||
ingest:
|
||
gb32960:
|
||
enabled: true
|
||
port: 9000
|
||
boss-threads: 1
|
||
worker-threads: 0 # 0 = Runtime.availableProcessors() * 2
|
||
# VIN 白名单认证(内存配置)。GB/T 32960 设备没有账号密码,身份由 VIN 决定。
|
||
auth:
|
||
enabled: ${GB32960_AUTH_ENABLED:false} # true 启用白名单;false 放行所有 VIN
|
||
case-sensitive: false # 默认大小写不敏感
|
||
whitelist: # VIN 列表,未列入的 0x01 登入返回 0x04 VIN_NOT_EXIST
|
||
# - LTEST000000000001
|
||
# - LGWEF4A58RE123456
|
||
# 平台登入 0x05 账号列表(GB/T 32960.3 表 29)。
|
||
# 列表为空时放行所有平台登入(兼容旧行为),否则 username/password 必须匹配,
|
||
# 失败返回 0x02 OTHER_ERROR 应答并关闭连接。
|
||
platforms:
|
||
- username: ${GB32960_PLATFORM_USER_1:lingniu}
|
||
password: ${GB32960_PLATFORM_PWD_1:Lingniu.2024#}
|
||
allowed-ips: # 可选:限制来源 IP,为空不限制
|
||
description: 外部下级平台 (原旧服务客户端)
|
||
# TLS 双向认证(可选)。启用后 Netty pipeline 前置 SslHandler 并强制客户端证书。
|
||
tls:
|
||
enabled: ${GB32960_TLS_ENABLED:false}
|
||
cert-path: ${GB32960_TLS_CERT:} # 服务端证书 PEM 路径
|
||
key-path: ${GB32960_TLS_KEY:} # 服务端私钥 PEM 路径(PKCS#8 未加密)
|
||
trust-cert-path: ${GB32960_TLS_CA:} # 受信 CA 证书 PEM,用于校验客户端证书
|
||
require-client-auth: true # 强制双向;false=单向 TLS
|
||
jt808:
|
||
enabled: false
|
||
port: 10808
|
||
max-frame-length: 1048
|
||
jt1078:
|
||
enabled: true
|
||
jsatl12:
|
||
enabled: true
|
||
port: 7612
|
||
file-store: file:///var/lingniu/alarm-files
|
||
mqtt:
|
||
enabled: false
|
||
endpoints:
|
||
- name: yutong
|
||
uri: ${MQTT_URI:ssl://cpxlm.axxc.cn:38883}
|
||
topic: ${MQTT_TOPIC:/ytforward/shln/+}
|
||
qos: 1
|
||
client-id: ${MQTT_CLIENT_ID:shlnClientId}
|
||
username: ${MQTT_USER:shln}
|
||
password: ${MQTT_PWD:}
|
||
tls:
|
||
ca-pem: ${MQTT_CA_PEM:}
|
||
client-pem: ${MQTT_CLIENT_PEM:}
|
||
client-key: ${MQTT_CLIENT_KEY:}
|
||
xinda-push:
|
||
enabled: false
|
||
host: ${XINDA_HOST:115.231.168.135}
|
||
port: ${XINDA_PORT:10100}
|
||
username: ${XINDA_USER:浙江羚牛}
|
||
password: ${XINDA_PWD:xd123456+}
|
||
subscribe-msg-ids: 0200,0300,0401
|
||
client-desc: 羚牛客户端
|
||
|
||
pipeline:
|
||
disruptor:
|
||
ring-buffer-size: 131072 # 2^17
|
||
wait-strategy: yielding # blocking | sleeping | yielding | busy-spin
|
||
producer-type: multi
|
||
dedup:
|
||
enabled: true
|
||
cache-size: 200000
|
||
ttl-seconds: 600
|
||
rate-limit:
|
||
per-vin-qps: 50
|
||
|
||
session:
|
||
store: memory-and-redis
|
||
token-ttl-seconds: 86400
|
||
|
||
sink:
|
||
mq:
|
||
# MQ Sink 总开关。true=装配 Kafka Producer 并投递事件;false=完全不装配(适合本地开发或 Kafka 不可达)。
|
||
enabled: ${KAFKA_ENABLED:false}
|
||
type: kafka # 后端选择:kafka | (rocketmq | pulsar 预留)
|
||
bootstrap-servers: ${KAFKA_BROKERS:localhost:9092}
|
||
compression-type: zstd
|
||
linger-ms: 20
|
||
batch-size: 65536
|
||
acks: all
|
||
enable-idempotence: true
|
||
topics:
|
||
realtime: vehicle.realtime
|
||
location: vehicle.location
|
||
alarm: vehicle.alarm
|
||
session: vehicle.session
|
||
media-meta: vehicle.media.meta
|
||
raw-archive: vehicle.raw.archive
|
||
dlq: vehicle.dlq
|
||
archive:
|
||
enabled: true
|
||
type: local # local | s3 | oss
|
||
path: ./archive/
|
||
|
||
management:
|
||
endpoints:
|
||
web:
|
||
exposure:
|
||
include: health,info,metrics,prometheus,env
|
||
metrics:
|
||
tags:
|
||
application: lingniu-vehicle-ingest
|
||
|
||
logging:
|
||
level:
|
||
root: INFO
|
||
com.lingniu.ingest: INFO
|
||
com.lingniu.ingest.protocol.gb32960.inbound.Gb32960ChannelHandler: INFO
|
||
com.lingniu.ingest.protocol.gb32960.codec.Gb32960FrameDecoder: INFO
|
||
com.lingniu.ingest.protocol.gb32960.codec.Gb32960BodyParser: INFO
|
||
# 信达 push 诊断:打开下面一行可以看到每一条收发的原始字节 hex dump
|
||
com.lingniu.ingest.inbound.xinda: INFO
|