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