130 lines
3.3 KiB
Markdown
130 lines
3.3 KiB
Markdown
# Go Vehicle Gateway 验证手册
|
||
|
||
本文档用于验证 Go 重构运行面:
|
||
|
||
- `go-vehicle-gateway`:GB32960 TCP、JT808 TCP、宇通 MQTT 接入。
|
||
- `go-history-writer`:Kafka RAW 写 TDengine。
|
||
- `go-stat-writer`:Kafka RAW 写 MySQL 每日指标。
|
||
- `go-realtime-api`:Kafka unified event 写 Redis,并提供实时查询 API。
|
||
|
||
## 本地构建验证
|
||
|
||
```bash
|
||
cd go/vehicle-gateway
|
||
go test ./...
|
||
go build ./cmd/gateway
|
||
go build ./cmd/history-writer
|
||
go build ./cmd/stat-writer
|
||
go build ./cmd/realtime-api
|
||
```
|
||
|
||
## 镜像构建
|
||
|
||
```bash
|
||
cd go/vehicle-gateway
|
||
docker build -t vehicle-gateway-go:local .
|
||
```
|
||
|
||
同一个镜像包含四个二进制:
|
||
|
||
- `/app/gateway`
|
||
- `/app/history-writer`
|
||
- `/app/stat-writer`
|
||
- `/app/realtime-api`
|
||
|
||
## Portainer 部署
|
||
|
||
Go 旁路 stack 文件:
|
||
|
||
```bash
|
||
deploy/portainer/docker-compose-go.yml
|
||
```
|
||
|
||
必填变量:
|
||
|
||
```bash
|
||
LINGNIU_GO_IMAGE_VERSION=<image-version>
|
||
KAFKA_BROKERS=172.17.111.56:9092
|
||
TDENGINE_DSN=root:<password>@ws(172.17.111.57:6041)/lingniu_vehicle_ts
|
||
MYSQL_DSN=lingniu_vehicle:<password>@tcp(rm-bp179zbv481rnw3e2.mysql.rds.aliyuncs.com:3306)/lingniu_vehicle_data?parseTime=true&charset=utf8mb4,utf8&loc=Asia%2FShanghai
|
||
IDENTITY_MYSQL_DSN=${MYSQL_DSN}
|
||
VEHICLE_IDENTITY_TABLE=vehicle_identity_binding
|
||
REDIS_ADDR=r-bp1u741kij7e51i481.redis.rds.aliyuncs.com:6379
|
||
REDIS_PASSWORD=<password>
|
||
REDIS_DB=50
|
||
```
|
||
|
||
宇通 MQTT 开启时再配置:
|
||
|
||
```bash
|
||
YUTONG_MQTT_ENABLED=true
|
||
YUTONG_MQTT_URI=<mqtt-uri>
|
||
YUTONG_MQTT_TOPICS=/ytforward/shln/+
|
||
YUTONG_MQTT_CLIENT_ID=lingniu-go-yutong-mqtt
|
||
YUTONG_MQTT_USERNAME=<username>
|
||
YUTONG_MQTT_PASSWORD=<password>
|
||
```
|
||
|
||
## ECS 进程检查
|
||
|
||
```bash
|
||
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' \
|
||
| egrep 'go-vehicle-gateway|go-history-writer|go-stat-writer|go-realtime-api|NAMES'
|
||
|
||
ss -lntp | egrep ':(808|32960|20210)\b'
|
||
```
|
||
|
||
## Kafka 验证
|
||
|
||
```bash
|
||
kafka-console-consumer --bootstrap-server 172.17.111.56:9092 \
|
||
--topic vehicle.raw.jt808.v1 --max-messages 1 --timeout-ms 10000
|
||
|
||
kafka-console-consumer --bootstrap-server 172.17.111.56:9092 \
|
||
--topic vehicle.raw.gb32960.v1 --max-messages 1 --timeout-ms 10000
|
||
|
||
kafka-console-consumer --bootstrap-server 172.17.111.56:9092 \
|
||
--topic vehicle.event.unified.v1 --max-messages 1 --timeout-ms 10000
|
||
```
|
||
|
||
## TDengine 验证
|
||
|
||
```sql
|
||
USE lingniu_vehicle_ts;
|
||
SHOW STABLES;
|
||
SELECT COUNT(*) FROM raw_frames;
|
||
SELECT COUNT(*) FROM vehicle_locations;
|
||
SELECT COUNT(*) FROM vehicle_mileage_points;
|
||
```
|
||
|
||
## MySQL 验证
|
||
|
||
```sql
|
||
SELECT protocol, metric_key, COUNT(*)
|
||
FROM vehicle_daily_metric
|
||
GROUP BY protocol, metric_key;
|
||
|
||
SELECT *
|
||
FROM vehicle_daily_metric
|
||
WHERE metric_key IN ('daily_mileage_km', 'daily_total_mileage_km')
|
||
ORDER BY updated_at DESC
|
||
LIMIT 20;
|
||
```
|
||
|
||
## Redis 实时查询
|
||
|
||
```bash
|
||
curl -sS 'http://115.29.187.205:20210/api/realtime/vehicles/<vin>'
|
||
curl -sS 'http://115.29.187.205:20210/api/realtime/vehicles/<vin>/online'
|
||
curl -sS 'http://115.29.187.205:20210/api/realtime/vehicles/<vin>/protocols/JT808'
|
||
```
|
||
|
||
## 验收证据
|
||
|
||
正式切换前至少记录:
|
||
|
||
- 一个真实 GB32960 VIN 的 RAW、location、mileage point、Redis snapshot。
|
||
- 一个真实 JT808 VIN/phone 的 RAW、location、mileage point、daily metric、Redis snapshot。
|
||
- 一个真实宇通 MQTT VIN 或 device_id 的 RAW、Redis snapshot。
|
||
- `go-history-writer` 和 `go-stat-writer` 重启后 Kafka offset 能继续推进。
|