项目概述
这是一个基于微服务架构实现的智能家居物联网平台,目前处于软件模拟阶段。系统通过微信小程序模拟智能灯和温湿度感应器的状态交互,后续计划接入 STM32 硬件并迁移至 Android 端。
技术栈选型
后端核心
- JDK 21, Spring Boot 3.2.5, Spring Cloud 2023.0.1
- Spring Cloud Alibaba 2023.0.1.0, Nacos 2.5.2
- Spring Data JPA, MQTT, WebSocket
数据存储
- MySQL 8.0, Redis 6.2.x, InfluxDB 2.8.0
前端应用
- Uniapp, Vue2
部署与运行流程
在开始之前,请确保本地或服务器环境已安装上述所有依赖。MQTT 中间件推荐使用 EMQX(5.8.9),测试连接可用 MQTTX。建议将中间件部署在 Linux 虚拟机中(如 Ubuntu 20.04),配置文件中的 IP 地址需根据实际网络环境调整。
准备工作包括安装 MySQL、Redis 和 InfluxDB,并在数据库中创建对应的 bucket(如 device_report)。Nacos 用于服务注册中心,EMQX 需新建用户并分配权限,这些凭证都要同步更新到配置文件中。
代码获取后,后端使用 IDEA 打开,前端压缩包解压后用 Uniapp 工具加载。执行数据库脚本 iot.sql 初始化表结构。启动服务时,依次开启 gateway-service、user-service 和 device-service。前端需在 manifest.json 中替换为有效的微信小程序 AppID 并编译运行。登录时直接使用 MySQL 用户表中预置的手机号即可进入系统体验。
项目中 Controller 层及入参回参均包含详细注释,可辅助理解业务逻辑。
通信机制说明
MQTT 主题订阅
为了实时感知设备上下线,利用 EMQX 内置的主题 $SYS/brokers/+/clients/# 进行订阅。当设备连接或断开时,服务器会收到通知推送。设备建立连接时的 client_id 直接映射为数据库中 iot_device 表的 device_sn 字段,这样服务端就能通过序列号精准标识每个终端。所有消息体统一采用 JSON 格式传输。
WebSocket 鉴权
在 device-service 的 WebsocketConfig 中实现了 Token 校验。由于 Token 仅在登录后返回,未携带该参数的连接会被直接拒绝。这种基础校验方式后续可能会优化,引入更完善的权限验证机制。
工程反思与改进方向
作为一个演示级项目,当前架构还有明显的优化空间:
- 微服务治理:目前仅拆分了网关、用户和设备服务,Nacos 的统一配置管理和自动刷新特性尚未充分利用。
- 安全框架:用户服务仅引入了 JWT,后续计划全面接入 Spring Security 做细粒度权限控制。
- 时序数据同步:InfluxDB 定时同步温湿度的逻辑目前是每 2 分钟一次,延迟较高,需要优化同步策略。
- 消息处理性能:MQTT 监听逻辑若耗时过长会影响心跳检测导致重连,考虑引入 RabbitMQ 或异步处理来解耦。
- 指令可靠性:智能灯的指令下发目前缺乏确认机制,容易出现指令发送但硬件未接收的情况,导致数据库状态不一致。未来需要对已下发指令增加短时间监听,待硬件回传状态后再更新数据库。
整体而言,这套方案适合快速搭建 IoT 原型,但在高并发和指令可靠性上仍需打磨。


