refactor: remove xinda from active runtime surface

This commit is contained in:
lingniu
2026-07-01 01:27:23 +08:00
parent 1ffa95c924
commit 83067eacc3
7 changed files with 14 additions and 111 deletions

View File

@@ -10,6 +10,6 @@ ENV JAVA_OPTS=""
WORKDIR /app WORKDIR /app
COPY modules/apps/${APP_NAME}/target/${APP_NAME}.jar /app/app.jar COPY modules/apps/${APP_NAME}/target/${APP_NAME}.jar /app/app.jar
EXPOSE 20100 20200 20300 20400 20500 20600 32960 10808 EXPOSE 20100 20200 20300 20400 20500 32960 10808
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /app/app.jar"] ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /app/app.jar"]

View File

@@ -4,7 +4,7 @@
## 设计目标 ## 设计目标
- **协议接入统一抽象**GB/T 32960、JT/T 808、JT/T 1078、JSATL12、MQTT、信达 Push 全部变成可插拔 Inbound Adapter - **协议接入统一抽象**GB/T 32960、JT/T 808、JT/T 1078、JSATL12、MQTT 全部变成可插拔 Inbound Adapter;信达 Push 仅保留为废弃兼容模块
- **原子能力化**:每个协议一个独立 Maven 模块 + 独立 AutoConfiguration + 独立配置开关 - **原子能力化**:每个协议一个独立 Maven 模块 + 独立 AutoConfiguration + 独立配置开关
- **业务 / 实时彻底解耦**:本服务只负责 **收 → 解析 → 校验 → 规整 → 投递 Kafka**,不碰业务库 - **业务 / 实时彻底解耦**:本服务只负责 **收 → 解析 → 校验 → 规整 → 投递 Kafka**,不碰业务库
- **高并发低延迟**Netty + Disruptor + Java 25 虚拟线程;目标单节点 ≥ 5 万 msg/sP99 < 50 ms - **高并发低延迟**Netty + Disruptor + Java 25 虚拟线程;目标单节点 ≥ 5 万 msg/sP99 < 50 ms
@@ -46,7 +46,7 @@ lingniu-vehicle-ingest/
│ │ └── protocol-jsatl12/ 苏标主动安全报警附件(真实 DataPacket 分帧 + 附件流归档 + T1210 文件清单身份继承 + 9212 补传应答 + MediaMeta 引用事件 + 坏帧/坏信令/归档失败兜底) │ │ └── protocol-jsatl12/ 苏标主动安全报警附件(真实 DataPacket 分帧 + 附件流归档 + T1210 文件清单身份继承 + 9212 补传应答 + MediaMeta 引用事件 + 坏帧/坏信令/归档失败兜底)
│ ├── inbound/ │ ├── inbound/
│ │ ├── inbound-mqtt/ MQTT 接入endpoint 生命周期 + profile 注册扩展 + 统一身份映射 + PEM 双向 TLS + 未知 profile/解析失败/profile异常/连接订阅失败兜底 + 统一 UNKNOWN 身份 metadata │ │ ├── inbound-mqtt/ MQTT 接入endpoint 生命周期 + profile 注册扩展 + 统一身份映射 + PEM 双向 TLS + 未知 profile/解析失败/profile异常/连接订阅失败兜底 + 统一 UNKNOWN 身份 metadata
│ │ └── inbound-xinda-push/ 信达 Push 接入(统一身份映射 + 事件 metadata 内部 VIN + 未知业务 cmd/解析失败/启动配置失败/业务处理异常兜底 │ │ └── inbound-xinda-push/ 信达 Push 接入(废弃兼容模块,不在默认构建/部署/历史消费链路中启用
│ ├── sinks/ │ ├── sinks/
│ │ ├── sink-mq/ Kafka producer + Protobuf Envelope │ │ ├── sink-mq/ Kafka producer + Protobuf Envelope
│ │ ├── sink-archive/ 原始报文冷存 │ │ ├── sink-archive/ 原始报文冷存
@@ -59,6 +59,7 @@ lingniu-vehicle-ingest/
│ ├── command-gateway/ HTTP → 设备下行命令808 位置/参数/属性/控制/区域删除/报警确认 + 1078 音视频控制) │ ├── command-gateway/ HTTP → 设备下行命令808 位置/参数/属性/控制/区域删除/报警确认 + 1078 音视频控制)
│ ├── gb32960-ingest-app/ GB32960 TCP 接入 + Kafka 投递 │ ├── gb32960-ingest-app/ GB32960 TCP 接入 + Kafka 投递
│ ├── jt808-ingest-app/ JT808 TCP 接入 + Kafka 投递 │ ├── jt808-ingest-app/ JT808 TCP 接入 + Kafka 投递
│ ├── yutong-mqtt-app/ 宇通 MQTT 接入 + Kafka 投递
│ ├── vehicle-history-app/ 历史查询 + 原始归档索引消费 │ ├── vehicle-history-app/ 历史查询 + 原始归档索引消费
│ └── vehicle-analytics-app/ 车辆状态/日统计消费 │ └── vehicle-analytics-app/ 车辆状态/日统计消费
├── docs/ 架构文档、模块图、实施计划 ├── docs/ 架构文档、模块图、实施计划

View File

@@ -26,9 +26,6 @@ x-common-env: &common-env
KAFKA_TOPIC_MQTT_EVENT: ${KAFKA_TOPIC_MQTT_EVENT:-vehicle.event.mqtt-yutong.v1} KAFKA_TOPIC_MQTT_EVENT: ${KAFKA_TOPIC_MQTT_EVENT:-vehicle.event.mqtt-yutong.v1}
KAFKA_TOPIC_MQTT_RAW: ${KAFKA_TOPIC_MQTT_RAW:-vehicle.raw.mqtt-yutong.v1} KAFKA_TOPIC_MQTT_RAW: ${KAFKA_TOPIC_MQTT_RAW:-vehicle.raw.mqtt-yutong.v1}
KAFKA_TOPIC_MQTT_DLQ: ${KAFKA_TOPIC_MQTT_DLQ:-vehicle.dlq.mqtt-yutong.v1} KAFKA_TOPIC_MQTT_DLQ: ${KAFKA_TOPIC_MQTT_DLQ:-vehicle.dlq.mqtt-yutong.v1}
KAFKA_TOPIC_XINDA_EVENT: ${KAFKA_TOPIC_XINDA_EVENT:-vehicle.event.xinda.v1}
KAFKA_TOPIC_XINDA_RAW: ${KAFKA_TOPIC_XINDA_RAW:-vehicle.raw.xinda.v1}
KAFKA_TOPIC_XINDA_DLQ: ${KAFKA_TOPIC_XINDA_DLQ:-vehicle.dlq.xinda.v1}
MYSQL_JDBC_URL: ${MYSQL_JDBC_URL:-} MYSQL_JDBC_URL: ${MYSQL_JDBC_URL:-}
MYSQL_USERNAME: ${MYSQL_USERNAME:-} MYSQL_USERNAME: ${MYSQL_USERNAME:-}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-}
@@ -81,7 +78,7 @@ services:
- vehicle-ingest - vehicle-ingest
yutong-mqtt-app: yutong-mqtt-app:
image: crpi-85r4m0ackrm3qpje.cn-shanghai.personal.cr.aliyuncs.com/oneos/partner-ingest-app:${LINGNIU_IMAGE_VERSION:?set LINGNIU_IMAGE_VERSION} image: crpi-85r4m0ackrm3qpje.cn-shanghai.personal.cr.aliyuncs.com/oneos/yutong-mqtt-app:${LINGNIU_IMAGE_VERSION:?set LINGNIU_IMAGE_VERSION}
container_name: yutong-mqtt-app container_name: yutong-mqtt-app
restart: unless-stopped restart: unless-stopped
environment: environment:
@@ -112,35 +109,6 @@ services:
networks: networks:
- vehicle-ingest - vehicle-ingest
xinda-push-app:
image: crpi-85r4m0ackrm3qpje.cn-shanghai.personal.cr.aliyuncs.com/oneos/partner-ingest-app:${LINGNIU_IMAGE_VERSION:?set LINGNIU_IMAGE_VERSION}
container_name: xinda-push-app
restart: unless-stopped
environment:
<<: *common-env
HTTP_PORT: 20600
MQTT_ENABLED: "false"
XINDA_PUSH_ENABLED: "true"
KAFKA_CONSUMER_ENABLED: "false"
KAFKA_NODE_ID: ${KAFKA_NODE_ID_XINDA:-xinda-push-portainer}
KAFKA_TOPIC_PARTNER_EVENT: ${KAFKA_TOPIC_XINDA_EVENT:-vehicle.event.xinda.v1}
KAFKA_TOPIC_PARTNER_RAW: ${KAFKA_TOPIC_XINDA_RAW:-vehicle.raw.xinda.v1}
KAFKA_TOPIC_PARTNER_DLQ: ${KAFKA_TOPIC_XINDA_DLQ:-vehicle.dlq.xinda.v1}
VEHICLE_IDENTITY_STORE: ${VEHICLE_IDENTITY_STORE:-mysql}
VEHICLE_IDENTITY_MYSQL_JDBC_URL: ${MYSQL_JDBC_URL:-}
VEHICLE_IDENTITY_MYSQL_USERNAME: ${MYSQL_USERNAME:-}
VEHICLE_IDENTITY_MYSQL_PASSWORD: ${MYSQL_PASSWORD:-}
XINDA_PUSH_HOST: ${XINDA_PUSH_HOST:-}
XINDA_PUSH_PORT: ${XINDA_PUSH_PORT:-10100}
XINDA_PUSH_USERNAME: ${XINDA_PUSH_USERNAME:-}
XINDA_PUSH_PASSWORD: ${XINDA_PUSH_PASSWORD:-}
XINDA_PUSH_CLIENT_DESC: ${XINDA_PUSH_CLIENT_DESC:-lingniu-ingest}
XINDA_PUSH_SUBSCRIBE_MSG_IDS: "${XINDA_PUSH_SUBSCRIBE_MSG_IDS:-0200,0300,0401}"
ports:
- "${XINDA_PUSH_HTTP_PORT:-20600}:20600"
networks:
- vehicle-ingest
vehicle-history-app: vehicle-history-app:
image: crpi-85r4m0ackrm3qpje.cn-shanghai.personal.cr.aliyuncs.com/oneos/vehicle-history-app:${LINGNIU_IMAGE_VERSION:?set LINGNIU_IMAGE_VERSION} image: crpi-85r4m0ackrm3qpje.cn-shanghai.personal.cr.aliyuncs.com/oneos/vehicle-history-app:${LINGNIU_IMAGE_VERSION:?set LINGNIU_IMAGE_VERSION}
container_name: vehicle-history-app container_name: vehicle-history-app
@@ -149,7 +117,6 @@ services:
- gb32960-ingest-app - gb32960-ingest-app
- jt808-ingest-app - jt808-ingest-app
- yutong-mqtt-app - yutong-mqtt-app
- xinda-push-app
environment: environment:
<<: *common-env <<: *common-env
HTTP_PORT: 20200 HTTP_PORT: 20200
@@ -159,7 +126,6 @@ services:
KAFKA_GROUP_HISTORY_GB32960: ${KAFKA_GROUP_HISTORY_GB32960:-vehicle-history} KAFKA_GROUP_HISTORY_GB32960: ${KAFKA_GROUP_HISTORY_GB32960:-vehicle-history}
KAFKA_GROUP_HISTORY_JT808: ${KAFKA_GROUP_HISTORY_JT808:-vehicle-history} KAFKA_GROUP_HISTORY_JT808: ${KAFKA_GROUP_HISTORY_JT808:-vehicle-history}
KAFKA_GROUP_HISTORY_MQTT_YUTONG: ${KAFKA_GROUP_HISTORY_MQTT_YUTONG:-vehicle-history} KAFKA_GROUP_HISTORY_MQTT_YUTONG: ${KAFKA_GROUP_HISTORY_MQTT_YUTONG:-vehicle-history}
KAFKA_GROUP_HISTORY_XINDA: ${KAFKA_GROUP_HISTORY_XINDA:-vehicle-history}
SINK_ARCHIVE_ENABLED: ${SINK_ARCHIVE_ENABLED:-true} SINK_ARCHIVE_ENABLED: ${SINK_ARCHIVE_ENABLED:-true}
SINK_ARCHIVE_PATH: /archive/ SINK_ARCHIVE_PATH: /archive/
EVENT_FILE_STORE_ENABLED: ${EVENT_FILE_STORE_ENABLED:-false} EVENT_FILE_STORE_ENABLED: ${EVENT_FILE_STORE_ENABLED:-false}

View File

@@ -31,13 +31,7 @@ public final class EnsureKafkaTopics {
topic("vehicle.dlq.jt808.v1", 3), topic("vehicle.dlq.jt808.v1", 3),
topic("vehicle.event.mqtt-yutong.v1", 12), topic("vehicle.event.mqtt-yutong.v1", 12),
topic("vehicle.raw.mqtt-yutong.v1", 12), topic("vehicle.raw.mqtt-yutong.v1", 12),
topic("vehicle.dlq.mqtt-yutong.v1", 3), topic("vehicle.dlq.mqtt-yutong.v1", 3));
topic("vehicle.event.xinda.v1", 12),
topic("vehicle.raw.xinda.v1", 12),
topic("vehicle.dlq.xinda.v1", 3),
topic("vehicle.event.xinda-push.v1", 12),
topic("vehicle.raw.xinda-push.v1", 12),
topic("vehicle.dlq.xinda-push.v1", 3));
Properties props = new Properties(); Properties props = new Properties();
props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, brokers); props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, brokers);

View File

@@ -65,11 +65,6 @@ lingniu:
group-id: ${KAFKA_GROUP_HISTORY_YUTONG_MQTT_EVENT:${KAFKA_GROUP_HISTORY:vehicle-history}-yutong-mqtt-event} group-id: ${KAFKA_GROUP_HISTORY_YUTONG_MQTT_EVENT:${KAFKA_GROUP_HISTORY:vehicle-history}-yutong-mqtt-event}
topics: topics:
- ${KAFKA_TOPIC_YUTONG_MQTT_EVENT:vehicle.event.mqtt-yutong.v1} - ${KAFKA_TOPIC_YUTONG_MQTT_EVENT:vehicle.event.mqtt-yutong.v1}
eventHistoryXindaPushEnvelopeConsumerProcessor:
enabled: true
group-id: ${KAFKA_GROUP_HISTORY_XINDA_PUSH_EVENT:${KAFKA_GROUP_HISTORY:vehicle-history}-xinda-push-event}
topics:
- ${KAFKA_TOPIC_XINDA_PUSH_EVENT:vehicle.event.xinda-push.v1}
eventHistoryGb32960RawEnvelopeConsumerProcessor: eventHistoryGb32960RawEnvelopeConsumerProcessor:
enabled: true enabled: true
group-id: ${KAFKA_GROUP_HISTORY_GB32960_RAW:${KAFKA_GROUP_HISTORY:vehicle-history}-gb32960-raw} group-id: ${KAFKA_GROUP_HISTORY_GB32960_RAW:${KAFKA_GROUP_HISTORY:vehicle-history}-gb32960-raw}
@@ -85,11 +80,6 @@ lingniu:
group-id: ${KAFKA_GROUP_HISTORY_YUTONG_MQTT_RAW:${KAFKA_GROUP_HISTORY:vehicle-history}-yutong-mqtt-raw} group-id: ${KAFKA_GROUP_HISTORY_YUTONG_MQTT_RAW:${KAFKA_GROUP_HISTORY:vehicle-history}-yutong-mqtt-raw}
topics: topics:
- ${KAFKA_TOPIC_YUTONG_MQTT_RAW:vehicle.raw.mqtt-yutong.v1} - ${KAFKA_TOPIC_YUTONG_MQTT_RAW:vehicle.raw.mqtt-yutong.v1}
eventHistoryXindaPushRawEnvelopeConsumerProcessor:
enabled: true
group-id: ${KAFKA_GROUP_HISTORY_XINDA_PUSH_RAW:${KAFKA_GROUP_HISTORY:vehicle-history}-xinda-push-raw}
topics:
- ${KAFKA_TOPIC_XINDA_PUSH_RAW:vehicle.raw.xinda-push.v1}
archive: archive:
enabled: ${SINK_ARCHIVE_ENABLED:true} enabled: ${SINK_ARCHIVE_ENABLED:true}
type: local type: local

View File

@@ -75,15 +75,6 @@ class VehicleHistoryAppDefaultsTest {
.containsEntry( .containsEntry(
"lingniu.ingest.sink.mq.consumer.bindings.eventHistoryYutongMqttEnvelopeConsumerProcessor.topics[0]", "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryYutongMqttEnvelopeConsumerProcessor.topics[0]",
"${KAFKA_TOPIC_YUTONG_MQTT_EVENT:vehicle.event.mqtt-yutong.v1}") "${KAFKA_TOPIC_YUTONG_MQTT_EVENT:vehicle.event.mqtt-yutong.v1}")
.containsEntry(
"lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushEnvelopeConsumerProcessor.enabled",
true)
.containsEntry(
"lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushEnvelopeConsumerProcessor.group-id",
"${KAFKA_GROUP_HISTORY_XINDA_PUSH_EVENT:${KAFKA_GROUP_HISTORY:vehicle-history}-xinda-push-event}")
.containsEntry(
"lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushEnvelopeConsumerProcessor.topics[0]",
"${KAFKA_TOPIC_XINDA_PUSH_EVENT:vehicle.event.xinda-push.v1}")
.containsEntry( .containsEntry(
"lingniu.ingest.sink.mq.consumer.bindings.eventHistoryGb32960RawEnvelopeConsumerProcessor.enabled", "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryGb32960RawEnvelopeConsumerProcessor.enabled",
true) true)
@@ -110,16 +101,13 @@ class VehicleHistoryAppDefaultsTest {
"${KAFKA_GROUP_HISTORY_YUTONG_MQTT_RAW:${KAFKA_GROUP_HISTORY:vehicle-history}-yutong-mqtt-raw}") "${KAFKA_GROUP_HISTORY_YUTONG_MQTT_RAW:${KAFKA_GROUP_HISTORY:vehicle-history}-yutong-mqtt-raw}")
.containsEntry( .containsEntry(
"lingniu.ingest.sink.mq.consumer.bindings.eventHistoryYutongMqttRawEnvelopeConsumerProcessor.topics[0]", "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryYutongMqttRawEnvelopeConsumerProcessor.topics[0]",
"${KAFKA_TOPIC_YUTONG_MQTT_RAW:vehicle.raw.mqtt-yutong.v1}") "${KAFKA_TOPIC_YUTONG_MQTT_RAW:vehicle.raw.mqtt-yutong.v1}");
.containsEntry(
"lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushRawEnvelopeConsumerProcessor.enabled", assertThat(properties)
true) .doesNotContainKey(
.containsEntry( "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushEnvelopeConsumerProcessor.enabled")
"lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushRawEnvelopeConsumerProcessor.group-id", .doesNotContainKey(
"${KAFKA_GROUP_HISTORY_XINDA_PUSH_RAW:${KAFKA_GROUP_HISTORY:vehicle-history}-xinda-push-raw}") "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushRawEnvelopeConsumerProcessor.enabled");
.containsEntry(
"lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushRawEnvelopeConsumerProcessor.topics[0]",
"${KAFKA_TOPIC_XINDA_PUSH_RAW:vehicle.raw.xinda-push.v1}");
} }
private static Properties applicationProperties() { private static Properties applicationProperties() {

View File

@@ -13,7 +13,7 @@ steps:
commands: | commands: |
cd $CI_WORKSPACE cd $CI_WORKSPACE
mvn -B -ntp -am -pl :gb32960-ingest-app,:jt808-ingest-app,:yutong-mqtt-app,:xinda-push-app,:vehicle-history-app,:vehicle-analytics-app package -DskipTests mvn -B -ntp -am -pl :gb32960-ingest-app,:jt808-ingest-app,:yutong-mqtt-app,:vehicle-history-app,:vehicle-analytics-app package -DskipTests
BRANCH_NAME=$(echo ${CI_COMMIT_BRANCH:-local} | tr / -) BRANCH_NAME=$(echo ${CI_COMMIT_BRANCH:-local} | tr / -)
PROJECT_VERSION=$(mvn -q -DforceStdout help:evaluate -Dexpression=project.version) PROJECT_VERSION=$(mvn -q -DforceStdout help:evaluate -Dexpression=project.version)
@@ -168,42 +168,6 @@ steps:
docker push $IMAGE docker push $IMAGE
- name: docker-build-xinda-push-app
image: docker:24.0.5-cli
when:
event:
- push
- pull_request
- manual
branch:
- master
- develop
- main
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
ALIYUN_ACR_USERNAME:
from_secret: aliyun_acr_username
ALIYUN_ACR_PASSWORD:
from_secret: aliyun_acr_password
commands: |
cd $CI_WORKSPACE
APP_NAME=xinda-push-app
APP_VERSION=$(cat $CI_WORKSPACE/project_version.txt)
IMAGE=crpi-85r4m0ackrm3qpje.cn-shanghai.personal.cr.aliyuncs.com/oneos/$APP_NAME:$APP_VERSION
docker build \
--build-arg APP_NAME=$APP_NAME \
--build-arg APP_VERSION=$APP_VERSION \
-t $IMAGE .
printf '%s' "$ALIYUN_ACR_PASSWORD" | docker login \
--username "$ALIYUN_ACR_USERNAME" \
--password-stdin \
crpi-85r4m0ackrm3qpje.cn-shanghai.personal.cr.aliyuncs.com
docker push $IMAGE
- name: docker-build-vehicle-analytics-app - name: docker-build-vehicle-analytics-app
image: docker:24.0.5-cli image: docker:24.0.5-cli
when: when: