feat: replace iot adapter with mqtt command pipeline
This commit is contained in:
@@ -53,7 +53,8 @@ flowchart LR
|
||||
| --- | --- | --- |
|
||||
| `api` | 用户端和五个管理系统的 HTTP API、鉴权、同步业务事务 | 无状态部署;所有写操作支持幂等键、事务和审计 |
|
||||
| `worker` | 事件消费、告警、派单、推送、对账、超时扫描、轨迹异常识别 | Redis Streams 消费组;重试、死信、幂等消费和可观测的积压告警 |
|
||||
| `iot` | MQTT 设备会话、协议适配、遥测校验、命令下发与回执 | 保持设备会话一致性;命令/回执持久化;协议版本和设备身份校验 |
|
||||
| `iot-client` | 管理系统/App 的设备上下行 HTTP 边界、幂等受理与状态查询 | 不绕过 API 的 JWT、角色、对象归属与安全状态校验 |
|
||||
| `iot-server` | 外部 MQTT Broker 会话、厂商协议适配、遥测校验、命令下发与回执 | 保持设备会话一致性;协议版本、设备身份、LRC8 与 AES 校验 |
|
||||
|
||||
关键业务采用“数据库事务 + Outbox 事件表 + Worker 投递”的模式:先在 PostgreSQL 提交业务事实与待投递事件,再异步写入 Redis Streams。这样 Redis 故障或 Worker 重启不会丢失订单、告警、支付或设备命令的业务事实。
|
||||
|
||||
@@ -62,7 +63,7 @@ flowchart LR
|
||||
| 基线 | 路径 | 使用要求 |
|
||||
| --- | --- | --- |
|
||||
| 前端工程基线 | 现有 Vue 管理端 | Vue 管理系统统一前端框架、路由、状态管理、请求封装、权限指令、表格表单、主题、错误处理、国际化与测试规范 |
|
||||
| 后端工程基线 | `backend/{api,worker,iot}` | Go API、Worker、IoT 进程统一沿用配置、日志、错误码、认证、数据库访问、任务、测试和发布规范 |
|
||||
| 后端工程基线 | `backend/{api,worker,iot-client,iot-server}` | Go API、Worker 与两个 IoT 进程统一沿用配置、日志、错误码、认证、任务、测试和发布规范 |
|
||||
|
||||
业务项目应通过共享包、模板或上游同步机制复用标准库,禁止将标准库目录复制到每个子项目后自行漂移。标准库升级需要记录版本、影响范围、兼容策略和回滚方式。
|
||||
|
||||
@@ -97,7 +98,8 @@ platforms/
|
||||
backend/
|
||||
api/ # Go HTTP API、BFF、同步领域事务
|
||||
worker/ # Go 异步任务:派单、告警、通知、对账、超时扫描
|
||||
iot/ # Go MQTT 协议适配、设备命令、遥测与回执
|
||||
iot-client/ # 管理系统/App 的设备上下行接口
|
||||
iot-server/ # MQTT 会话、厂商协议、设备命令、遥测与回执
|
||||
contracts/
|
||||
openapi/ # HTTP API 契约及生成配置
|
||||
asyncapi/ # MQTT/Redis Streams 事件契约与 Schema
|
||||
@@ -112,7 +114,7 @@ platforms/
|
||||
performance/ # 遥测、订单、轨迹与消息积压压测
|
||||
```
|
||||
|
||||
其中 `apps/user_app`、`apps/service_app`、`backend/{api,worker,iot}` 与当前管理端目录已经落地;其余标记为规划的目录仍不得因局部任务提前创建空壳。
|
||||
其中 `apps/user_app`、`apps/service_app`、`backend/{api,worker,iot-client,iot-server}` 与当前管理端目录已经落地;其余标记为规划的目录仍不得因局部任务提前创建空壳。
|
||||
|
||||
## 6. 后端领域划分
|
||||
|
||||
|
||||
@@ -43,6 +43,10 @@
|
||||
|
||||
## 3. IoT 协议与可靠性
|
||||
|
||||
- 设备厂商 V1.8 二进制帧保持 `0x5E` 起始、`0x5B` 结束、大端序、数据包 AES-128 与 LRC8 规则不变,并作为 MQTT payload 传输;Topic 使用 `devices/{deviceId}/{up|down|ack}`,QoS 1,下行命令禁止 retained。
|
||||
- `iot-server` 只处理 MQTT 会话和设备协议,`iot-client` 只提供系统侧上下行接口;命令、Outbox、原始上行和回执事实由 API 持久化,Worker 负责可重试投递。
|
||||
- 协议封面版本与变更记录冲突时以最新 V1.8 变更记录和绿色标注为兼容实现依据;重复子标识等歧义必须保留原始报文并按设备型号配置解析,不得静默猜测。
|
||||
|
||||
- 设备采用 MQTT over TLS,设备身份使用每设备证书或短期轮换令牌;禁止共享默认密钥。
|
||||
- 上行消息至少包含设备 ID、协议版本、消息 ID、设备时间、服务端接收时间、指标值、质量标记和固件版本。
|
||||
- 下行命令包含命令 ID、幂等键、期望状态、过期时间、签名/鉴权信息;设备回传已收到、执行中、成功/失败与错误码。
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
| AC-22 | 设备共享与紧急联系人 | 设备所有者可独立授予或撤销成员查看/控制权限;高风险告警自动关阀后仅通知已授权紧急联系人,且审计完整 |
|
||||
| AC-23 | 二维码与轨迹隐私 | 二维码不包含用户隐私、账号凭证或接口密钥;用户只看本人订单简化轨迹,精确轨迹回放/导出须经审批、水印和审计,非履约位置不可访问 |
|
||||
| AC-24 | 钱包实体命名一致性 | 数据库表、Go/Flutter/Vue 模型和契约均使用 `wal_wallet_ledger`;不得出现 `wal_ledger`、复数表名或同义钱包流水实体 |
|
||||
| AC-25 | MQTT 设备命令与协议回执 | API 事务写入命令和 Outbox;Worker 可重试投递;MQTT 下行包含命令标识、幂等键和过期时间;无设备回执保持待确认,重复请求不重复下发;原始上行、设备时间和服务端接收时间可追溯 |
|
||||
|
||||
## 3. 非功能验收
|
||||
|
||||
|
||||
Reference in New Issue
Block a user