news 2026/11/2 3:55:05

基于若依框架的物联网平台开发实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于若依框架的物联网平台开发实践

1. 为什么选择若依框架开发物联网平台

若依(RuoYi)作为国内流行的开源后台管理系统框架,在快速开发企业级应用方面具有显著优势。这个基于SpringBoot的权限管理系统采用主流技术栈(MyBatis、Shiro、Vue等),其模块化设计和丰富的功能组件特别适合作为物联网平台的基础架构。

我选择若依框架开发物联网平台主要基于以下考量:

  • 权限控制完善:物联网平台涉及设备管理、数据权限等复杂场景,若依内置的RBAC权限模型和部门数据隔离机制可直接复用
  • 代码生成器高效:平台需要大量设备管理CRUD界面,若依的代码生成器可快速产出标准化的前后端代码
  • 多终端适配:支持PC、平板和移动端的响应式布局,符合物联网平台多端访问需求
  • 社区生态丰富:活跃的开发者社区和大量现成插件,能显著降低物联网特定功能的开发成本

2. 物联网平台核心架构设计

2.1 技术栈选型

在若依标准技术栈基础上,物联网平台需要补充以下组件:

若依基础架构: - 后端:Spring Boot 2.7 + MyBatis Plus - 前端:Vue 3 + Element Plus - 安全:Shiro + JWT 物联网扩展组件: - 协议支持:Netty(TCP/UDP) + Paho MQTT Client - 设备管理:EMQX Broker 5.0(百万级设备连接) - 时序数据:InfluxDB 2.6(高性能时间序列存储) - 规则引擎:Node-RED(可视化业务流编排) - 监控告警:Prometheus + Grafana

2.2 关键模块划分

graph TD A[设备接入层] --> B[协议适配模块] B --> C[设备管理服务] C --> D[数据持久化] D --> E[业务规则引擎] E --> F[可视化平台]

3. 设备接入层实现细节

3.1 多协议适配方案

在ruoyi-system模块中新建iot-protocol子模块,采用策略模式实现协议适配:

// 协议接口定义 public interface ProtocolHandler { void process(byte[] payload, Channel channel); DeviceInfo parseDeviceInfo(); } // MQTT处理器实现 @Service("mqttHandler") public class MqttHandler implements ProtocolHandler { @Override public void process(byte[] payload, Channel channel) { // 解析MQTT特定报文格式 MqttMessage message = new MqttMessage(payload); String topic = message.getTopic(); // ...业务处理 } } // TCP处理器实现 @Service("tcpHandler") public class TcpHandler implements ProtocolHandler { // ...类似实现 }

3.2 设备鉴权流程

改造若依原有的Shiro认证流程,增加设备级认证:

  1. 设备注册:通过若依的sys_device表存储设备三元组(productKey, deviceName, deviceSecret)
  2. 连接认证:设备上线时通过MQTT的username/password或TCP的加密报文进行身份验证
  3. 动态权限:根据设备类型绑定对应的数据发布/订阅权限

4. 数据持久化方案

4.1 时序数据存储

针对物联网高频数据特点,采用分层存储策略:

数据类型存储方案保留策略查询特点
实时数据InfluxDB7天毫秒级响应
历史数据TDengine1年按需聚合
冷数据MinIO永久离线分析

4.2 业务数据整合

在若依原有sys_表前缀基础上,新增物联网专用表:

CREATE TABLE iot_device ( device_id BIGINT PRIMARY KEY, product_key VARCHAR(64) NOT NULL, device_name VARCHAR(128) NOT NULL, status TINYINT DEFAULT 0, last_online_time DATETIME, meta_data JSON COMMENT '设备扩展属性' ) ENGINE=InnoDB; CREATE TABLE iot_property_log ( id BIGINT AUTO_INCREMENT, device_id BIGINT NOT NULL, identifier VARCHAR(64) NOT NULL, value DOUBLE PRECISION, report_time DATETIME(3) NOT NULL, PRIMARY KEY (id, report_time) ) ENGINE=InnoDB PARTITION BY RANGE (TO_DAYS(report_time)) ( PARTITION p202301 VALUES LESS THAN (TO_DAYS('2023-02-01')), PARTITION p202302 VALUES LESS THAN (TO_DAYS('2023-03-01')) );

5. 平台功能扩展实践

5.1 规则引擎集成

在若依管理后台增加规则编排界面:

  1. 引入Node-RED编辑器前端组件
  2. 开发若依权限对接模块
  3. 实现流程版本管理和发布控制

关键配置示例:

# application-iot.yml nodered: editor: path: /iot/rule/designer auth: enabled: true admin-role: iot_admin storage: type: mysql table-prefix: iot_flow_

5.2 可视化大屏

基于若依原有Echarts集成,开发设备监控专用组件:

<template> <div class="iot-dashboard"> <el-row> <el-col :span="12"> <device-status-chart :product-key="currentProduct"/> </el-col> <el-col :span="12"> <data-stream-chart :device-id="selectedDevice"/> </el-col> </el-row> </div> </template> <script> import { getDeviceRealTimeData } from '@/api/iot/device' export default { data() { return { currentProduct: null, selectedDevice: null } }, mounted() { this.initWebSocket() }, methods: { initWebSocket() { const ws = new WebSocket(`wss://${location.host}/iot/ws/device`) ws.onmessage = (event) => { const data = JSON.parse(event.data) this.$refs.statusChart.update(data) } } } } </script>

6. 性能优化关键点

6.1 连接管理优化

针对海量设备连接场景,需要调整若依默认配置:

# EMQX配置 listeners.tcp.default = 0.0.0.0:1883 listeners.tcp.default.max_connections = 1000000 listeners.ssl.default = 0.0.0.0:8883 listeners.ssl.default.max_connections = 500000 # Spring Boot调优 server.tomcat.max-threads=2000 server.tomcat.accept-count=1000 spring.redis.lettuce.pool.max-active=2000

6.2 缓存策略设计

采用多级缓存减轻数据库压力:

  1. 本地缓存:Caffeine缓存设备基础信息
  2. 分布式缓存:Redis缓存实时状态数据
  3. 时序数据库缓存:InfluxDB下行采样策略

缓存更新策略示例:

@CacheEvict(value = "deviceMeta", key = "#deviceId") public void updateDeviceMeta(Long deviceId, DeviceMeta meta) { // 先更新数据库 deviceMapper.updateMeta(deviceId, meta); // 再清除相关缓存 redisTemplate.delete("device:stats:" + deviceId); }

7. 安全防护方案

7.1 通信安全加固

  1. 传输加密:所有设备连接强制TLS 1.3
  2. 报文签名:采用SM4国密算法对关键指令签名
  3. 频控策略:基于若依的限流模块扩展设备级QPS控制

7.2 权限深度控制

扩展若依的@RequiresPermissions注解:

@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface RequiresDevicePermission { String[] value(); Logical logical() default Logical.AND; } // 使用示例 @RequiresDevicePermission({"device:control", "device:config"}) @PostMapping("/control") public R controlDevice(@RequestBody DeviceCmd cmd) { // 业务逻辑 }

8. 部署架构建议

8.1 生产环境拓扑

+-----------------+ | CDN/OSS | +--------+--------+ | +---------------+ +-------+-------+ +-----------------+ | Web前端集群 +---+ Nginx网关层 +---+ 若依应用集群 | +-------+-------+ +-------+-------+ +--------+--------+ | | | +-------+-------+ +-------+-------+ +--------+--------+ | 设备接入层 | | 消息中间件 | | 数据服务层 | | (EMQX集群) | | (Kafka) | | (MySQL+InfluxDB)| +---------------+ +---------------+ +-----------------+

8.2 容器化配置示例

# EMQX容器配置 FROM emqx/emqx:5.0.26 COPY ./etc/plugins/emqx_auth_mysql.conf /opt/emqx/etc/plugins/ RUN echo "emqx_auth_mysql.enable = true" >> /opt/emqx/etc/emqx.conf # 若依应用容器 FROM openjdk:17-jdk COPY target/ruoyi-iot.jar /app/ ENTRYPOINT ["java","-jar","/app/ruoyi-iot.jar"]

在物联网项目实施过程中,我发现若依的模块化设计能很好地适应物联网平台的扩展需求。特别是在权限管理和多租户支持方面,原有的系统架构几乎不需要修改就能直接应用。最大的挑战在于设备连接管理部分,需要合理设计会话保持机制,这部分建议结合EMQX的企业版功能进行深度定制

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/2 3:54:13

Graph RAG在金融知识管理中的落地实践:从图谱构建到双路召回

金融行业的知识管理&#xff0c;过去十年基本是在“文档堆里刨食”。一份信贷政策文件从总行下发到分支行&#xff0c;中间要经过解读、拆解、培训、考核四道关&#xff0c;等一线客户经理真正用上&#xff0c;往往已经过去两三周。更麻烦的是&#xff0c;同一个问题问三个部门…

作者头像 李华
网站建设 2026/11/2 3:52:24

跟风把Jev接入生产三天后拆掉:模型选型与混合网关避坑复盘

跟风把 Jev 当成便宜版 GPT 接进系统&#xff0c;三天后我默默拆了重做。这句话不是我刷社区时复制下来的段子&#xff0c;而是我上个月亲历的一趟完整事故。当时我们项目的 GPT 接口账单每月已经跑到一万多块&#xff0c;老板给的压力很大&#xff0c;恰好那阵子到处都在聊 Je…

作者头像 李华
网站建设 2026/11/2 3:52:23

从2019 AI行业报告复盘:模型部署与工程化落地的真实路径

前阵子整理硬盘资料&#xff0c;翻出一份2019年的人工智能行业研究报告&#xff0c;重新通读一遍&#xff0c;再对照这几年AI领域的变化&#xff0c;感受确实不一样。今天就用这篇标题里的报告作为引子&#xff0c;聊聊我当时是怎么理解、怎么拆解、怎么把这类研究报告真正用起…

作者头像 李华
网站建设 2026/11/2 3:52:09

达梦DTS MySQL到DM8迁移实战:原理、避坑与平滑切换

1. 项目概述&#xff1a;为什么一个数据库迁移工具值得花一整天去拆解它达梦数据库DTS工具MySQL→DM8&#xff0c;这串字符组合在最近三个月的某高校信创实验室、某省属政务云迁移项目组、以及几家中小银行核心系统国产化替代推进会上&#xff0c;出现频率高得有点反常。不是因…

作者头像 李华
网站建设 2026/11/2 3:50:43

资本约束下AI创业生存指南:从算力成本到应用落地

上个月我参加了一个小范围的AI创投闭门会&#xff0c;台上的分享嘉宾讲完自己产品后&#xff0c;第一个提问是&#xff1a;"你账上的现金还能撑几个月&#xff1f;"台下没人觉得这个问题冒犯&#xff0c;因为在场所有人都清楚&#xff0c;人工智能行业正在经历一个微…

作者头像 李华
网站建设 2026/11/2 3:50:25

AI Agent并发、多模型协作与模型部署:从热搜看AI工程化落地关键

1. 今日AI观察&#xff1a;从热搜看产业风向今天的热搜词比往常更值得玩味。打开榜单扫了一圈&#xff0c;高频词基本集中在AI Agent、多AI协作、DeepSeek公开智能体训练方法、AI音视频、AI短剧、AI测试开发、AI产品经理、AI模型部署这几条线上。除此之外还有相当数量的偏门热搜…

作者头像 李华