使用 EMQX 社区版 v5.8.7 将 MQTT 消息持久化到 MySQL 数据库的实践指南
使用 EMQX 社区版 v5.8.7 将 MQTT 消息持久化到 MySQL 数据库的实践指南
摘要:本文详细介绍了如何在 EMQX 社区版 v5.8.7 中,通过规则引擎将 MQTT 消息持久化到本地 MySQL 数据库,解决社区版缺乏消息历史查询能力的问题,为中小团队和创业公司提供一种低成本、高可控性的数据落地方案。
1. 为什么选择 EMQX 社区版 v5.8.7?
1.1 成本与可控性的权衡
在物联网(IoT)项目初期,消息中间件的选择往往面临“功能”与“成本”的双重考量。EMQX 作为业界领先的开源 MQTT 消息服务器,提供了多个版本:
版本类型 | 费用情况 | 同时在线连接上限 | 消息历史查询 | 适用场景 |
---|---|---|---|---|
EMQX Cloud 免费版 | 免费 | ≤ 1000 | ✅(有限) | 原型验证、小型测试 |
EMQX 企业版 | ¥935 / 月起 | 无硬性限制 | ✅ | 中大型生产环境 |
EMQX 社区版 v5.8.7 | 完全免费、开源 | 无硬性限制 | ❌ | 自建服务器、成本敏感型项目 |
💡 对于创业公司或预算有限的团队,EMQX 社区版 v5.8.7 成为极具吸引力的选择——不仅完全免费,还能部署在自有服务器上,数据主权完全掌握在自己手中,避免了云服务潜在的数据合规与安全风险。
1.2 社区版的局限与痛点
尽管 EMQX 社区版在连接能力上表现优异,生产与消费消息稳定可靠,但在实际运维中我们发现一个关键短板:
无法查看历史消息的 payload 内容。
这意味着一旦设备上报异常,运维人员无法回溯原始报文进行分析,极大增加了故障排查难度。而企业版提供的“消息追踪”与“历史消息查询”功能恰好能解决这一问题,但其订阅费用对初创团队仍显高昂。
1.3 曾尝试的解决方案及其挑战
为弥补这一缺陷,我们曾探索多种方案:
1.3.1 使用官方 MySQL 插件
早期 EMQX 提供过 emqx_mysql
插件,但该插件在 v5.x 架构中已被废弃。尝试在 v5.8.7 中强行集成时,遭遇以下问题:
- 插件与当前版本 Erlang/OTP 不兼容;
- 编译依赖复杂,文档缺失;
- 社区支持有限,问题难以定位。
1.3.2 修改 EMQX 源码
考虑到 EMQX 使用 Erlang(ERL)语言开发,我们评估过自行扩展写入 MySQL 的逻辑。但团队缺乏 Erlang 开发经验,学习成本高、周期长,短期内难以落地。
1.3.3 转向规则引擎:轻量级破局之道
最终,我们发现 EMQX v5.x 引入的规则引擎(Rule Engine) 提供了更灵活、低侵入的解决方案。虽然社区版不支持直接写入数据库的动作(Action),但可通过“消息重发布(Republish)”将原始消息转发至特定主题,再由外部服务(如自研消费者)订阅该主题并写入 MySQL。
✅ 这一方案无需修改 EMQX 核心,部署简单,且完全兼容社区版。