
1. 项目背景与选型考量在工业4.0和数字化转型浪潮下物联网平台成为连接物理世界与数字世界的核心枢纽。我们团队在评估了多个开源框架后最终选择基于RuoYi-Vue进行二次开发主要基于以下考量技术栈匹配性RuoYi采用Spring Boot Vue.js的前后端分离架构完美契合现代物联网平台的技术需求。后端Spring Boot的微服务特性适合处理海量设备连接前端Vue.js的响应式设计便于实时数据可视化。快速开发优势RuoYi内置完善的权限管理、代码生成器等模块可节省约40%的基础功能开发时间。例如其代码生成器可自动创建设备管理模块的CRUD接口只需调整业务逻辑即可投入使用。社区生态支持Gitee上已有多个成功落地的物联网扩展项目如Shenbao-iot、frog-smart-agriculture证明该框架在IoT领域的可行性。2. 核心架构设计2.1 整体架构分层[接入层] ├── MQTT BrokerEMQX集群 ├── HTTP API网关Spring Cloud Gateway └── 协议转换器Modbus/OPC UA等 [业务层] ├── 设备管理服务 ├── 数据聚合服务 └── 规则引擎服务 [数据层] ├── 时序数据库TDengine ├── 关系型数据库MySQL分库 └── 缓存集群Redis Sentinel2.2 关键改造点协议适配层扩展// 自定义协议解码器示例 public class ModbusDecoder implements ProtocolAdapter { Override public DeviceData decode(byte[] rawData) { // 实现Modbus RTU到统一数据模型的转换 return new DeviceData() .setValue(BinaryUtils.toFloat(rawData, 4)) .setTimestamp(System.currentTimeMillis()); } }RuoYi权限体系改造原用户-角色-菜单体系扩展为租户-项目-设备三级权限增加设备级别的操作权限控制如只读工程师、运维管理员3. 设备接入实现细节3.1 MQTT集成方案采用EMQX作为消息中间件关键配置# application-mqtt.yml emqx: nodes: - 192.168.1.10:1883 - 192.168.1.11:1883 topics: upload: /iot/{productKey}/{deviceName}/upload control: /iot/{productKey}/{deviceName}/control3.2 设备影子服务为解决设备离线时的状态同步问题开发了设备影子模块设备上线时自动拉取最新期望状态采用MongoDB存储设备历史状态快照冲突解决策略版本号比对4. 数据持久化优化4.1 时序数据存储-- TDengine超级表设计 CREATE STABLE IF NOT EXISTS device_metrics ( ts TIMESTAMP, temperature FLOAT, humidity FLOAT, voltage FLOAT ) TAGS ( device_id NCHAR(64), region NCHAR(32) );4.2 冷热数据分离热数据7天内TDengine内存表温数据30天内TDengine SSD存储冷数据定期归档到MinIO对象存储5. 规则引擎实现5.1 告警规则配置通过扩展RuoYi原有的定时任务模块实现可视化规则配置// 前端规则配置组件 rule-editor :triggers[TEMPERATURE80, HUMIDITY30] :actions[SMS_ALERT, RELAY_OFF] /5.2 规则执行引擎采用Drools实现复杂事件处理rule 高温告警 when $data : DeviceData(temperature 80, deviceType HVAC) then insert(new AlarmEvent($data.getDeviceId(), HIGH_TEMP)); end6. 性能优化实践连接池调优# 数据库连接池配置 spring.datasource.hikari.maximum-pool-size50 spring.datasource.hikari.connection-timeout30000缓存策略设备元数据Redis缓存 本地Caffeine二级缓存采用Redisson实现分布式锁管理设备配置更新前端性能提升使用WebWorker处理大规模数据渲染采用ECharts GL实现3D设备拓扑图7. 安全防护措施设备认证一机一密每个设备单独分配证书动态Token每小时刷新访问令牌数据安全传输层MQTT over TLS 1.3应用层敏感数据SM4加密审计日志扩展RuoYi的日志模块记录所有设备操作采用Elasticsearch存储审计日志8. 部署方案8.1 容器化部署# 自定义基础镜像 FROM openjdk:11-jre COPY target/iot-platform.jar /app/ EXPOSE 8080 1883 ENTRYPOINT [java,-jar,/app/iot-platform.jar]8.2 Kubernetes编排关键配置# HPA配置 apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: iot-core spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: iot-core minReplicas: 3 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 709. 踩坑与解决方案时区问题现象设备上报时间与系统显示相差8小时解决统一使用UTC时间存储前端按用户时区转换大报文处理现象Modbus TCP长报文导致TCP粘包优化自定义LengthFieldBasedFrameDecoder实现内存泄漏现象长时间运行后OOM定位使用Arthas发现未释放的Netty ByteBuf修复重写ChannelInboundHandler的异常处理逻辑10. 扩展功能实现视频监控集成通过WebRTC实现设备实时视频流采用MediaServer集群转发RTSP流边缘计算支持开发边缘计算网关SDK支持Lua脚本定义边缘计算规则数字孪生使用Three.js构建3D设备模型实时同步物理设备状态到数字孪生体11. 项目成果性能指标单节点支持5万设备并发连接消息处理延迟50msP99数据写入吞吐量20万点/秒功能模块已完成设备管理、数据采集、规则引擎等12个核心模块扩展开发视频分析、能源管理等6个行业套件落地案例智慧工厂连接2000工业设备智能农业覆盖3000亩温室大棚12. 后续优化方向架构升级引入Kafka替换部分MQTT Topic尝试使用RSocket提升服务间通信效率智能化增强集成TensorFlow Lite实现边缘AI推理开发可视化机器学习工作流生态建设开发设备厂商接入SDK构建应用市场机制关键建议在RuoYi原有代码生成器基础上我们开发了专门的物联网模板生成功能可自动创建带设备通信协议的Controller层代码这是项目快速迭代的重要保障。建议在二次开发时优先完善这类基础设施。