IoT 平台项目规划
1. 项目定位
以本司硬件设备数字化交付为起点,建立产品、物模型、设备身份、用户绑定、设备消息、远程控制、告警和审计的统一平台。第一阶段采用模块化单体快速完成业务闭环,业务和吞吐边界稳定后再演进微服务。
2. 已确定技术路线
| 范围 | 选型 |
|---|---|
| 管理后台 | Vue 3 + TypeScript + Vite |
| 后端 | Java 17 + Spring Boot 3 模块化单体 |
| 用户端 | 原生微信小程序 |
| 数据库 | MySQL + Flyway |
| 登录/缓存 | Redis |
| 消息总线 | Kafka |
| MQTT Broker | EMQX |
| 设备消息边界 | 后端只消费和发布 Kafka Topic,不直连 MQTT |
3. 当前数据链路
上行:设备 → MQTT → EMQX → Kafka → Spring Boot → MySQL/Redis
下行:管理后台/小程序 → Spring Boot → Kafka → EMQX → MQTT → 设备
回执:设备 → EMQX → Kafka command.ack → Spring Boot → MySQL
EMQX 管理设备连接和 MQTT ACL;Kafka 作为后端与 EMQX 的唯一设备消息边界。设备消息 Topic 名称、Key、JSON Schema 和版本由双方共同维护。
4. 分阶段交付
| 阶段 | 目标 | 交付 |
|---|---|---|
| 当前单体一期 | 本司设备闭环 | Vue 管理后台、Spring Boot API、小程序、MySQL/Redis/Kafka/EMQX 集成 |
| 一期增强 | 稳定生产运行 | ACK 超时重试、Outbox、批量注册、OTA、监控、备份恢复 |
| 二期 | 客户设备开放 | 多租户、物模型自助、接入 SDK、API Key/Webhook |
| 三期 | 企业 SaaS | 企业后台、设备组、工单履约、OEM/ERP OpenAPI |
| 微服务阶段 | 独立扩缩容和发布 | 优先拆消息接入、控制和告警服务 |
5. 单体优先原则
- 所有业务模块先在一个 Spring Boot 工程和一个发布单元内实现。
- 包结构按领域分层,禁止 Controller 直接操作 Repository。
- Kafka 消息 DTO 独立版本化,未来拆服务不改变设备侧协议。
- MySQL 表明确模块所有权;跨模块修改通过应用服务完成。
- 微服务拆分必须有容量、故障隔离或团队协作的真实驱动。
6. 待补配置
中间件均已部署,等待地址文档后补充:
- MySQL JDBC URL、库名、账号和 TLS 参数。
- Redis 地址、密码、DB、Sentinel/Cluster 模式。
- Kafka bootstrap servers、SASL/TLS、Topic 分区、副本和 ACL。
- EMQX Dashboard/API 地址、Kafka Connector/Bridge 名称、MQTT Topic 映射。
- 各环境域名、证书、网络访问策略和密钥托管方式。
源码已经通过环境变量预留全部地址,不需要再次改代码。
7. 当前完成标准
Vue TypeScript 生产构建通过;Spring Boot H2/内存适配测试通过;真实配置不入库;后端不存在 MQTT 客户端依赖;Kafka 上行、事件、下行和 ACK 主题契约明确;小程序继续复用同一 API。