物联网实战:MQTT平台 | MQTT规则引擎
MQTT规则引擎的核心作用,是为物联网平台提供一个无需编写代码的可视化数据处理中枢
MQTT 规则引擎到底有没有必要(设备规模)
小型项目(几十~几百台设备、只做透传转发)
非必需,可以不用规则引擎
- 需求:设备上报数据原样转发后端服务、无数据过滤、无自动下发、无告警、无入库逻辑
- 落地做法:Netty Broker 收到 PUBLISH 直接转发 MQTT 客户端订阅,业务全写在后端服务
- 缺点:新增过滤 / 告警就要改后端代码、发布重启
中型 / 标准 IoT 平台(千台以上设备、工业 / 智慧家居 / 充电桩)
必须做规则引擎(行业标配)
- 消息过滤裁剪:设备高频上报原始数据,只把超限、异常数据入库 / 告警,减少数据库 IO 压力(例:温度>60℃才存库)
- 数据异构转换:设备 payload 是 JSON / 二进制,规则层统一字段映射,不用每个业务系统单独解析报文
- 自动化联动:传感器上报异常→平台自动下发指令控设备(温感超标→关闭电磁阀),零后端介入
- 灵活业务迭代:新增业务不用改 Broker 和后端代码,后台配置 SQL 规则即可生效,这是用 SQL 存规则的核心价值
大型集群平台(十万 + 设备、车联网 / 智能制造)
强依赖规则引擎,架构不可缺
- 海量消息分流:不同主题数据分别落 MySQL/Influx/Kafka、分业务队列,Broker 层完成分流,避免全量消息打入后端导致雪崩
业务场景角度
规则引擎的作用
- 1)MQTT Broker 只负责消息收发与主题分发
不解析报文内容,物联网核心诉求是基于报文内容做事件驱动,阈值判断、数据筛选、设备联动这类逻辑无法在 Broker 原生实现
- 2)剥离业务逻辑至规则层
避免过滤、清洗、转发逻辑分散在各个业务服务里,防止业务服务重复解析设备报文、重复做数据校验,降低上下游耦合
- 3)物联网业务规则高频变动
修改告警阈值、存储策略、转发链路,依托配置化规则即可生效,不用迭代业务服务代码、不用上线发布
- 4)统一做消息治理
报文编解码、脏数据过滤、消息分流、异构系统对接,全链路收口在规则引擎,方便统一运维、故障排查、全链路监控
不需要规则引擎
业务只有纯粹消息透传,设备上报数据不做任何筛选、转换、条件判断、跨系统转发,所有原始消息统一由单一消费服务全量接收处理,后续也无新增事件类业务规划,此时可舍弃规则引擎
不同路线比较
| 路线 | 规则存储 | 开发量 | 适用项目 |
|---|---|---|---|
| EMQX 内置 SQL 规则 | EMQX 自有库 + 自定义 MySQL | 0 开发,开箱即用 | 快速上线、不想自研底层 |
| 外置独立规则服务 | MySQL | 中等(Broker + 规则双服务) | 旧项目改造、Broker 不动 |
| 自研内置 SQL 规则 | 自建 MySQL 规则表 | 分步自研(你当前路线) | 私有化定制、长期迭代平台 |
统一选用「SQL 存储规则」而不是配置文件 / 硬编码?
- 可视化管理:配套管理后台做规则新增 / 启停 / 编辑,产品、运维不用改代码
- 热更新:DB 修改规则,定时任务刷新内存缓存,不用重启 Broker 服务
- 数据追溯:规则变更记录、规则触发日志全部落库,方便故障排查
- 多环境兼容:生产 / 测试环境规则隔离,快速批量导入导出规则
层级结构图
┌─────────────┐
│ MQTT Broker │
└──────┬──────┘
↓
┌─────────────────┐ 【外置独立:协议编解码网关】
│ 二进制/16进制解码│
└────────┬────────┘
↓
┌─────────────────────────────┐
│ 规则引擎主体架构 │
│ ┌───────────────────────┐ │
│ │消息接入&预处理削峰层│ │
│ └───────────┬───────────┘ │
│ ↓ │
│ ┌───────────────────────┐ │
│ │规则配置&缓存管理层 │ │
│ └───────────┬───────────┘ │
│ ↓ │
│ ┌───────────────────────┐ │
│ │主题索引粗匹配层 │ │
│ └───────────┬───────────┘ │
│ ↓ │
│ ┌───────────────────────┐ │
│ │表达式条件运算层(核) │ │
│ └───────────┬───────────┘ │
│ ↓ │
│ ┌───────────────────────┐ │
│ │动作插件调度执行层 │ │
│ └───────────┬───────────┘ │
└─────────────┬──────────────┘
↓
数据库/HTTP/MQTT/告警服务
