From 83067eacc3d2874ce39049f8d2115480aabe5465 Mon Sep 17 00:00:00 2001 From: lingniu Date: Wed, 1 Jul 2026 01:27:23 +0800 Subject: [PATCH] refactor: remove xinda from active runtime surface --- Dockerfile | 2 +- README.md | 5 ++- deploy/portainer/docker-compose.yml | 36 +----------------- deploy/tools/EnsureKafkaTopics.java | 8 +--- .../src/main/resources/application.yml | 10 ----- .../VehicleHistoryAppDefaultsTest.java | 26 ++++--------- woodpecker.yml | 38 +------------------ 7 files changed, 14 insertions(+), 111 deletions(-) diff --git a/Dockerfile b/Dockerfile index 626ef2d2..9288b003 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,6 @@ ENV JAVA_OPTS="" WORKDIR /app 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"] diff --git a/README.md b/README.md index a8c7b401..68b7cae5 100644 --- a/README.md +++ b/README.md @@ -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 + 独立配置开关 - **业务 / 实时彻底解耦**:本服务只负责 **收 → 解析 → 校验 → 规整 → 投递 Kafka**,不碰业务库 - **高并发低延迟**:Netty + Disruptor + Java 25 虚拟线程;目标单节点 ≥ 5 万 msg/s,P99 < 50 ms @@ -46,7 +46,7 @@ lingniu-vehicle-ingest/ │ │ └── protocol-jsatl12/ 苏标主动安全报警附件(真实 DataPacket 分帧 + 附件流归档 + T1210 文件清单身份继承 + 9212 补传应答 + MediaMeta 引用事件 + 坏帧/坏信令/归档失败兜底) │ ├── inbound/ │ │ ├── inbound-mqtt/ MQTT 接入(endpoint 生命周期 + profile 注册扩展 + 统一身份映射 + PEM 双向 TLS + 未知 profile/解析失败/profile异常/连接订阅失败兜底 + 统一 UNKNOWN 身份 metadata) -│ │ └── inbound-xinda-push/ 信达 Push 接入(统一身份映射 + 事件 metadata 内部 VIN + 未知业务 cmd/解析失败/启动配置失败/业务处理异常兜底) +│ │ └── inbound-xinda-push/ 信达 Push 接入(废弃兼容模块,不在默认构建/部署/历史消费链路中启用) │ ├── sinks/ │ │ ├── sink-mq/ Kafka producer + Protobuf Envelope │ │ ├── sink-archive/ 原始报文冷存 @@ -59,6 +59,7 @@ lingniu-vehicle-ingest/ │ ├── command-gateway/ HTTP → 设备下行命令(808 位置/参数/属性/控制/区域删除/报警确认 + 1078 音视频控制) │ ├── gb32960-ingest-app/ GB32960 TCP 接入 + Kafka 投递 │ ├── jt808-ingest-app/ JT808 TCP 接入 + Kafka 投递 +│ ├── yutong-mqtt-app/ 宇通 MQTT 接入 + Kafka 投递 │ ├── vehicle-history-app/ 历史查询 + 原始归档索引消费 │ └── vehicle-analytics-app/ 车辆状态/日统计消费 ├── docs/ 架构文档、模块图、实施计划 diff --git a/deploy/portainer/docker-compose.yml b/deploy/portainer/docker-compose.yml index 4ec591e8..39f3dc00 100644 --- a/deploy/portainer/docker-compose.yml +++ b/deploy/portainer/docker-compose.yml @@ -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_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_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_USERNAME: ${MYSQL_USERNAME:-} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-} @@ -81,7 +78,7 @@ services: - vehicle-ingest 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 restart: unless-stopped environment: @@ -112,35 +109,6 @@ services: networks: - 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: 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 @@ -149,7 +117,6 @@ services: - gb32960-ingest-app - jt808-ingest-app - yutong-mqtt-app - - xinda-push-app environment: <<: *common-env HTTP_PORT: 20200 @@ -159,7 +126,6 @@ services: KAFKA_GROUP_HISTORY_GB32960: ${KAFKA_GROUP_HISTORY_GB32960:-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_XINDA: ${KAFKA_GROUP_HISTORY_XINDA:-vehicle-history} SINK_ARCHIVE_ENABLED: ${SINK_ARCHIVE_ENABLED:-true} SINK_ARCHIVE_PATH: /archive/ EVENT_FILE_STORE_ENABLED: ${EVENT_FILE_STORE_ENABLED:-false} diff --git a/deploy/tools/EnsureKafkaTopics.java b/deploy/tools/EnsureKafkaTopics.java index 85d4012a..e99e0c42 100644 --- a/deploy/tools/EnsureKafkaTopics.java +++ b/deploy/tools/EnsureKafkaTopics.java @@ -31,13 +31,7 @@ public final class EnsureKafkaTopics { topic("vehicle.dlq.jt808.v1", 3), topic("vehicle.event.mqtt-yutong.v1", 12), topic("vehicle.raw.mqtt-yutong.v1", 12), - 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)); + topic("vehicle.dlq.mqtt-yutong.v1", 3)); Properties props = new Properties(); props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, brokers); diff --git a/modules/apps/vehicle-history-app/src/main/resources/application.yml b/modules/apps/vehicle-history-app/src/main/resources/application.yml index d4f24f9b..e760cdec 100644 --- a/modules/apps/vehicle-history-app/src/main/resources/application.yml +++ b/modules/apps/vehicle-history-app/src/main/resources/application.yml @@ -65,11 +65,6 @@ lingniu: group-id: ${KAFKA_GROUP_HISTORY_YUTONG_MQTT_EVENT:${KAFKA_GROUP_HISTORY:vehicle-history}-yutong-mqtt-event} topics: - ${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: enabled: true 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} topics: - ${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: enabled: ${SINK_ARCHIVE_ENABLED:true} type: local diff --git a/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/VehicleHistoryAppDefaultsTest.java b/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/VehicleHistoryAppDefaultsTest.java index 3eb5dd99..3e5600e1 100644 --- a/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/VehicleHistoryAppDefaultsTest.java +++ b/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/VehicleHistoryAppDefaultsTest.java @@ -75,15 +75,6 @@ class VehicleHistoryAppDefaultsTest { .containsEntry( "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryYutongMqttEnvelopeConsumerProcessor.topics[0]", "${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( "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryGb32960RawEnvelopeConsumerProcessor.enabled", true) @@ -110,16 +101,13 @@ class VehicleHistoryAppDefaultsTest { "${KAFKA_GROUP_HISTORY_YUTONG_MQTT_RAW:${KAFKA_GROUP_HISTORY:vehicle-history}-yutong-mqtt-raw}") .containsEntry( "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryYutongMqttRawEnvelopeConsumerProcessor.topics[0]", - "${KAFKA_TOPIC_YUTONG_MQTT_RAW:vehicle.raw.mqtt-yutong.v1}") - .containsEntry( - "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushRawEnvelopeConsumerProcessor.enabled", - true) - .containsEntry( - "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushRawEnvelopeConsumerProcessor.group-id", - "${KAFKA_GROUP_HISTORY_XINDA_PUSH_RAW:${KAFKA_GROUP_HISTORY:vehicle-history}-xinda-push-raw}") - .containsEntry( - "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushRawEnvelopeConsumerProcessor.topics[0]", - "${KAFKA_TOPIC_XINDA_PUSH_RAW:vehicle.raw.xinda-push.v1}"); + "${KAFKA_TOPIC_YUTONG_MQTT_RAW:vehicle.raw.mqtt-yutong.v1}"); + + assertThat(properties) + .doesNotContainKey( + "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushEnvelopeConsumerProcessor.enabled") + .doesNotContainKey( + "lingniu.ingest.sink.mq.consumer.bindings.eventHistoryXindaPushRawEnvelopeConsumerProcessor.enabled"); } private static Properties applicationProperties() { diff --git a/woodpecker.yml b/woodpecker.yml index e2877fe0..6845bfd4 100644 --- a/woodpecker.yml +++ b/woodpecker.yml @@ -13,7 +13,7 @@ steps: commands: | 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 / -) PROJECT_VERSION=$(mvn -q -DforceStdout help:evaluate -Dexpression=project.version) @@ -168,42 +168,6 @@ steps: 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 image: docker:24.0.5-cli when: