chore: remove local service runners
This commit is contained in:
@@ -44,125 +44,51 @@ mvn -pl :gb32960-ingest-app,:jt808-ingest-app,:yutong-mqtt-app,:vehicle-history-
|
||||
- `modules/apps/vehicle-history-app/target/vehicle-history-app.jar`
|
||||
- `modules/apps/vehicle-analytics-app/target/vehicle-analytics-app.jar`
|
||||
|
||||
## 启动 JT808 接入服务,监听 808 端口
|
||||
## ECS 服务状态验证
|
||||
|
||||
生产服务只在 ECS 上运行,通过 Portainer/Docker 管理。不要在本机用 `java -jar`、plist 或其它守护进程方式启动 GB32960、JT808、Yutong MQTT、history、analytics。
|
||||
|
||||
```bash
|
||||
HTTP_PORT=20400 \
|
||||
JT808_PORT=808 \
|
||||
KAFKA_CONSUMER_ENABLED=false \
|
||||
java -jar modules/apps/jt808-ingest-app/target/jt808-ingest-app.jar
|
||||
```
|
||||
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' \
|
||||
| egrep 'gb32960|jt808|yutong|vehicle-history|vehicle-analytics|NAMES'
|
||||
|
||||
验证:
|
||||
ss -lntp | egrep ':(808|32960|20100|20200|20300|20400|20500)\b'
|
||||
|
||||
```bash
|
||||
curl -sS http://127.0.0.1:20400/actuator/health
|
||||
curl -sS http://127.0.0.1:20400/actuator/health/liveness
|
||||
curl -sS http://127.0.0.1:20400/actuator/health/readiness
|
||||
lsof -nP -iTCP:808 -sTCP:LISTEN
|
||||
```
|
||||
|
||||
预期:健康检查为 `UP`,并且 Java 进程监听 TCP `808`。
|
||||
|
||||
## 启动 GB32960 接入服务
|
||||
|
||||
```bash
|
||||
HTTP_PORT=20100 \
|
||||
GB32960_PORT=32960 \
|
||||
KAFKA_CONSUMER_ENABLED=false \
|
||||
java -jar modules/apps/gb32960-ingest-app/target/gb32960-ingest-app.jar
|
||||
```
|
||||
|
||||
验证:
|
||||
|
||||
```bash
|
||||
curl -sS http://127.0.0.1:20100/actuator/health
|
||||
curl -sS http://127.0.0.1:20100/actuator/health/liveness
|
||||
curl -sS http://127.0.0.1:20100/actuator/health/readiness
|
||||
lsof -nP -iTCP:32960 -sTCP:LISTEN
|
||||
```
|
||||
|
||||
## 启动 Yutong MQTT 接入服务
|
||||
|
||||
```bash
|
||||
HTTP_PORT=20500 \
|
||||
YUTONG_MQTT_ENABLED=true \
|
||||
YUTONG_MQTT_AUTO_STARTUP=true \
|
||||
KAFKA_CONSUMER_ENABLED=false \
|
||||
java -jar modules/apps/yutong-mqtt-app/target/yutong-mqtt-app.jar
|
||||
```
|
||||
|
||||
验证:
|
||||
|
||||
```bash
|
||||
curl -sS http://127.0.0.1:20500/actuator/health
|
||||
curl -sS http://127.0.0.1:20500/actuator/health/liveness
|
||||
curl -sS http://127.0.0.1:20500/actuator/health/readiness
|
||||
```
|
||||
|
||||
预期:健康检查为 `UP`,并且 Kafka 中 `vehicle.raw.mqtt-yutong.v1`、`vehicle.event.mqtt-yutong.v1` 能随真实 MQTT 消息增长。
|
||||
|
||||
## 启动 TDengine 版历史服务
|
||||
|
||||
```bash
|
||||
HTTP_PORT=20200 \
|
||||
KAFKA_CONSUMER_ENABLED=true \
|
||||
java -jar modules/apps/vehicle-history-app/target/vehicle-history-app.jar
|
||||
```
|
||||
|
||||
验证:
|
||||
|
||||
```bash
|
||||
curl -sS http://127.0.0.1:20200/actuator/health
|
||||
curl -sS http://127.0.0.1:20200/actuator/health/liveness
|
||||
curl -sS http://127.0.0.1:20200/actuator/health/readiness
|
||||
curl -sS http://127.0.0.1:20200/v3/api-docs \
|
||||
| grep -E '/api/event-history/locations|/api/event-history/raw-frames'
|
||||
```
|
||||
|
||||
预期:健康检查为 `UP`,OpenAPI 中包含通用位置分页查询和 RAW 帧查询接口。history-app 不暴露 `/api/event-history/telemetry/fields`,也不持续写入逐字段宽表。
|
||||
|
||||
## 启动 JT808 指标统计服务
|
||||
|
||||
```bash
|
||||
HTTP_PORT=20300 \
|
||||
KAFKA_CONSUMER_ENABLED=true \
|
||||
VEHICLE_STAT_ENABLED=true \
|
||||
VEHICLE_STAT_JT808_MILEAGE_ENABLED=true \
|
||||
java -jar modules/apps/vehicle-analytics-app/target/vehicle-analytics-app.jar
|
||||
```
|
||||
|
||||
验证:
|
||||
|
||||
```bash
|
||||
curl -sS http://127.0.0.1:20300/actuator/health
|
||||
curl -sS http://127.0.0.1:20300/actuator/health/liveness
|
||||
curl -sS http://127.0.0.1:20300/actuator/health/readiness
|
||||
```
|
||||
|
||||
预期:健康检查为 `UP`;JT808 位置帧中有 GPS 总里程时,服务按差值法写入 MySQL `vehicle_stat_metric` 的 `daily_mileage_km` 指标。
|
||||
预期:五个容器均为运行状态;健康检查为 `UP`;JT808/GB32960 TCP 端口在 ECS 上监听;OpenAPI 中包含通用位置分页查询和 RAW 帧查询接口。history-app 不暴露 `/api/event-history/telemetry/fields`,也不持续写入逐字段宽表。JT808 位置帧中有 GPS 总里程时,`vehicle-analytics-app` 按差值法写入 MySQL `vehicle_stat_metric` 的 `daily_mileage_km` 指标。
|
||||
|
||||
## 本机 launchctl 部署
|
||||
## 运行位置约束
|
||||
|
||||
当前本机生产验证建议使用仓库模板生成 plist:
|
||||
|
||||
```bash
|
||||
deploy/local/launchctl/
|
||||
```
|
||||
|
||||
关键约束:
|
||||
生产身份绑定固定使用 MySQL,不再提供 file/memory/sqlite 运行时切换入口。生产服务固定运行在 ECS/Portainer,不提供本机守护进程模板。
|
||||
|
||||
- `jt808-ingest-app` 监听 TCP `808`,HTTP `20400`。
|
||||
- `gb32960-ingest-app` 监听 TCP `32960`,HTTP `20100`。
|
||||
- `yutong-mqtt-app` 监听 HTTP `20500`。
|
||||
- `vehicle-history-app` 监听 HTTP `20200`。
|
||||
- Yutong MQTT 与 `vehicle-analytics-app` 可以按上面的 jar 启动命令手工验收;Portainer/ECS 生产部署已包含这两个服务。
|
||||
- history 热查询只依赖 Kafka 和 TDengine `raw_frames`;本地模板不会给 history 注入 `SINK_ARCHIVE_PATH`。
|
||||
- GB32960/JT808 接入服务可以继续使用 `SINK_ARCHIVE_PATH` 保存原始 `.bin` 冷备,但这不是 history API 的实时查询前置条件。
|
||||
- 替换 jar 前先 `launchctl bootout`,再复制 jar 和 `launchctl bootstrap`,避免 KeepAlive 在 jar 拷贝中途重启。
|
||||
- `vehicle-analytics-app` 监听 HTTP `20300`。
|
||||
- history 热查询只依赖 Kafka 和 TDengine `raw_frames`;history 不需要共享 archive volume。
|
||||
- GB32960/JT808/Yutong MQTT 接入服务可以继续使用 `SINK_ARCHIVE_PATH` 保存原始冷备,但这不是 history API 的实时查询前置条件。
|
||||
|
||||
JT808 注册身份绑定:
|
||||
|
||||
- 生产身份绑定固定使用 MySQL,不再提供 file/memory/sqlite 运行时切换入口。
|
||||
- 生产需要把 0x0100 注册信息维护到 MySQL 时,只需要配置 `VEHICLE_IDENTITY_MYSQL_*` 连接参数。
|
||||
- 需要提供 `VEHICLE_IDENTITY_MYSQL_JDBC_URL`、`VEHICLE_IDENTITY_MYSQL_USERNAME`、`VEHICLE_IDENTITY_MYSQL_PASSWORD`。
|
||||
- 服务启动时自动创建 `vehicle_identity_binding` 和 `vehicle_identity_binding_registration` 两张表。`vehicle_identity_binding` 只维护 `plate`、`vin` 两列;`vehicle_identity_binding_registration` 按 `protocol + phone` 保存 JT808 0x0100 注册字段。
|
||||
@@ -220,7 +146,7 @@ API / Swagger:
|
||||
|
||||
## JT808 实时转发验收
|
||||
|
||||
如果外部平台已经把 JT808 报文转发到本机 TCP `808`,至少观察 60 秒日志和 Kafka 数据。
|
||||
如果外部平台已经把 JT808 报文转发到 ECS TCP `808`,至少观察 60 秒日志和 Kafka 数据。
|
||||
|
||||
必须拿到以下证据:
|
||||
|
||||
@@ -272,13 +198,15 @@ SELECT COUNT(*) FROM jt808_locations;
|
||||
- TDengine 未启用时,TDengine 专属接口不应该出现在 OpenAPI 中。
|
||||
- 路径不存在时,API 层应该返回 HTTP `404`,而不是泛化的存储失败。
|
||||
|
||||
## 2026-06-29 本机实时链路验证结果
|
||||
## 2026-06-29 Superseded Local Live Verification Record
|
||||
|
||||
运行服务:
|
||||
该记录仅保留为解析和存储行为的历史证据;生产运行位置已经收敛到 ECS/Portainer。
|
||||
|
||||
- `com.lingniu.jt808.808`: `jt808-ingest-app`,TCP `808`,HTTP `20400`
|
||||
- `com.lingniu.gb32960.32960`: `gb32960-ingest-app`,TCP `32960`,HTTP `20100`
|
||||
- `com.lingniu.vehicle-history.jt808`: `vehicle-history-app`,HTTP `20200`
|
||||
当时参与验证的服务:
|
||||
|
||||
- `jt808-ingest-app`:TCP `808`,HTTP `20400`
|
||||
- `gb32960-ingest-app`:TCP `32960`,HTTP `20100`
|
||||
- `vehicle-history-app`:HTTP `20200`
|
||||
|
||||
当次健康检查均返回 `{"status":"UP"}`。
|
||||
|
||||
@@ -300,7 +228,7 @@ python3 tools/vehicle_ingest_live_verify.py \
|
||||
|
||||
JT808 真实转发链路已验证:
|
||||
|
||||
- 本机 TCP `808` 有外部平台 `222.66.200.68` 持续发送 JT808 报文。
|
||||
- ECS TCP `808` 有外部平台 `222.66.200.68` 持续发送 JT808 报文。
|
||||
- `vehicle.raw.jt808.v1` 和 `vehicle.event.jt808.v1` 被 history 消费。
|
||||
- `raw_frames` 中 `protocol='JT808'` 的真实行数已超过 `36000`。
|
||||
- 外部平台真实 0x0100 注册帧已超过 `347` 条,真实 0x0200 位置帧已超过 `12400` 条。
|
||||
@@ -309,7 +237,7 @@ JT808 真实转发链路已验证:
|
||||
- 分页 API 已用终端号 `13079963301` 验证第一页和 nextCursor 第二页,样例位置包含 `longitude=118.913846`、`latitude=31.927309`、`statusFlag=3` 和 `archive://2026/06/29/JT808/...` 原始帧引用。
|
||||
- 注册帧样例:终端号 `13079963320`、deviceId `9963320`、deviceType `SEG-9888G`、plate `沪A61559F`、maker `70112`、province `31`、city `113`、plateColor `2`。生产 VIN 反写依赖 MySQL identity store,后续 raw/event 的 VIN 解析也从 MySQL 绑定读取。
|
||||
|
||||
## JT808 本机 smoke / 轻压测工具
|
||||
## JT808 ECS smoke / 轻压测工具
|
||||
|
||||
仓库提供 `tools/jt808_e2e_smoke.py`,用于重复验证 TCP `808` 到 TDengine history 的闭环:
|
||||
|
||||
@@ -416,7 +344,7 @@ curl -sS 'http://127.0.0.1:20200/api/event-history/gb32960/snapshots/fields?vin=
|
||||
|
||||
## 当前注意事项
|
||||
|
||||
- 当前本机使用 TDengine WebSocket JDBC,例如 `jdbc:TAOS-WS://<tdengine-host>:6041/vehicle_ts`。
|
||||
- 当前生产链路使用 TDengine WebSocket JDBC,例如 `jdbc:TAOS-WS://<tdengine-host>:6041/vehicle_ts`。
|
||||
- `KAFKA_CONSUMER_AUTO_OFFSET_RESET=latest` 适合生产接入新流量;如果要回放历史 Kafka 数据,需要切换 consumer group 或重置 offset。
|
||||
- `vehicle-history-app` raw 和 event 使用不同 consumer binding;raw consumer 必须开启,否则 `raw_frames` 不会持续增长。
|
||||
- JT808 设备没有 VIN 映射时,`vehicle_key` 使用 `jt808:<phone>`;启用 MySQL identity store 后,registration 表中已反写 VIN 的 phone/deviceId/plate 会用于后续 raw/event 的 VIN 解析。
|
||||
|
||||
Reference in New Issue
Block a user