news 2026/4/24 23:00:30

如何在5分钟内为EMQX实现MySQL消息持久化?emqx_persistence_plugin终极指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何在5分钟内为EMQX实现MySQL消息持久化?emqx_persistence_plugin终极指南

如何在5分钟内为EMQX实现MySQL消息持久化?emqx_persistence_plugin终极指南

【免费下载链接】emqx_persistence_plugin项目地址: https://gitcode.com/gh_mirrors/em/emqx_persistence_plugin

你是否正在使用EMQX构建物联网项目,却发现消息数据转瞬即逝,无法进行历史查询和数据分析?你是否为消息丢失而烦恼,需要一种可靠的消息持久化方案?emqx_persistence_plugin正是为解决这些问题而生的完美工具!这个开源插件让你能够轻松地将EMQX的MQTT消息实时存储到MySQL数据库,实现消息的永久保存和灵活查询。😊

为什么你需要消息持久化?

想象一下这样的场景:你的智能家居设备每分钟上报一次状态数据,工厂传感器每秒发送一次生产数据,或者你的车联网平台实时接收车辆位置信息。这些宝贵的数据如果只在内存中短暂存在,一旦服务器重启或网络中断,所有历史记录都将消失。

传统EMQX的局限性:

  • 消息仅在内存中存在
  • 重启服务器后数据丢失
  • 无法进行历史数据回溯
  • 难以进行数据分析和报表生成

emqx_persistence_plugin带来的改变:

  • ✅ 消息自动持久化到MySQL
  • ✅ 支持客户端连接/断开记录
  • ✅ 完整消息内容存储
  • ✅ 支持SSL安全连接
  • ✅ 灵活的配置选项

快速开始:5分钟上手体验

第一步:获取插件源码

git clone https://gitcode.com/gh_mirrors/em/emqx_persistence_plugin cd emqx_persistence_plugin

第二步:准备MySQL数据库

执行项目中的数据库脚本创建必要的表结构:

mysql -u root -p < mysql.sql

这个脚本会自动创建三张核心表:

  • on_client_connected- 客户端连接记录表
  • on_client_disconnected- 客户端断开记录表
  • on_client_publish- 消息发布记录表

第三步:配置插件参数

编辑配置文件etc/emqx_persistence_plugin.conf,设置你的MySQL连接信息:

## 启用持久化功能 emqx_persistence_plugin.enable_persistence = on ## MySQL服务器配置 persistence.mysql.server = 127.0.0.1:3306 persistence.mysql.username = root persistence.mysql.password = your_password persistence.mysql.database = mqtt persistence.mysql.pool = 8

第四步:集成到EMQX项目

由于插件依赖EMQX的库,需要将插件代码复制到EMQX源码的apps目录下,然后在rebar.config.erl中添加插件依赖,最后执行make命令构建。

核心功能深度解析

消息持久化机制

emqx_persistence_plugin通过EMQX的Hook机制捕获各种事件,并实时存储到MySQL:

事件类型存储内容应用场景
客户端连接客户端ID、用户名、IP地址、连接时间用户登录审计、设备在线统计
客户端断开客户端ID、断开原因、断开时间异常断开分析、设备状态监控
消息发布消息ID、主题、载荷、时间戳消息历史查询、数据备份

灵活的配置选项

etc/emqx_persistence_plugin.conf中,你可以根据需求定制化配置:

Hook配置示例:

# 只持久化特定主题的消息 emqx_persistence_plugin.hook.message.publish.1 = {"action": "on_message_publish", "topic": "sensors/#"} # 记录所有客户端订阅行为 emqx_persistence_plugin.hook.client.subscribe.1 = {"action": "on_client_subscribe", "topic": "#"}

MySQL高级配置:

# 启用SSL安全连接 persistence.mysql.ssl = on persistence.mysql.ssl.cafile = /path/to/ca.pem persistence.mysql.ssl.certfile = /path/to/client-cert.pem persistence.mysql.ssl.keyfile = /path/to/client-key.pem # 查询超时设置 persistence.mysql.query_timeout = 10s

实际应用场景展示

场景一:智能家居数据存储

假设你有一个智能温湿度监控系统,设备每分钟上报数据到主题home/livingroom/temperature。使用emqx_persistence_plugin后:

  1. 所有温度数据自动存入MySQL
  2. 可以通过SQL查询任意时间段的数据
  3. 生成温度变化趋势图表
  4. 设置温度异常报警规则

场景二:工业物联网设备监控

工厂中的设备传感器实时发送状态数据:

  • 设备运行状态
  • 生产计数
  • 故障报警信息

插件将这些数据持久化后,你可以:

  • 分析设备运行效率
  • 预测设备维护时间
  • 生成生产日报表
  • 追溯历史故障原因

场景三:车联网位置追踪

车辆GPS设备每10秒发送一次位置信息,插件确保:

  • 所有位置数据不丢失
  • 支持历史轨迹回放
  • 计算行驶里程和速度
  • 分析驾驶行为模式

性能优化与最佳实践

数据库表结构设计

项目提供的mysql.sql已经优化了表结构,包含以下关键设计:

  1. 自增主键:每条记录都有唯一的ID
  2. UTF8MB4编码:支持所有Unicode字符
  3. 动态行格式:优化存储空间
  4. 适当的索引:提升查询性能

连接池配置建议

# 根据并发连接数调整连接池大小 persistence.mysql.pool = 16 # 高并发场景建议16-32

小贴士:连接池大小应该略大于你的最大并发客户端数,但不要过大以免占用过多数据库连接。

错误处理与重试机制

插件内置了健壮的错误处理逻辑:

  • 数据库连接失败时自动重连
  • SQL执行异常时记录日志但不中断服务
  • 支持配置查询超时时间

常见问题解决方案

问题1:插件加载失败怎么办?

检查步骤:

  1. 确认EMQX版本为v4.3.10+
  2. 检查MySQL服务是否正常运行
  3. 验证数据库连接配置是否正确
  4. 查看EMQX日志文件获取详细错误信息

问题2:消息存储延迟过高?

优化建议:

  1. 调整MySQL的innodb_flush_log_at_trx_commit参数
  2. 增加连接池大小:persistence.mysql.pool = 16
  3. 考虑使用MySQL的读写分离架构
  4. 定期清理历史数据,保持表体积合理

问题3:如何备份持久化数据?

备份策略:

  1. 使用MySQL的mysqldump定期备份
  2. 配置MySQL主从复制
  3. 将历史数据归档到其他存储系统
  4. 使用mysql.sql脚本随时重建表结构

进阶功能探索

自定义存储逻辑

如果你需要更复杂的存储逻辑,可以修改src/emqx_persistence_plugin.erl中的相关函数:

%% 自定义消息处理逻辑 on_message_publish(Message, _Env) -> %% 这里可以添加自定义处理逻辑 %% 比如:数据清洗、格式转换、条件过滤等 emqx_persistence_plugin_cli:insert(publish, [Message#message.id, Message#message.topic]), ok.

多数据库支持扩展

虽然当前版本主要支持MySQL,但你可以基于现有代码扩展支持:

  • PostgreSQL
  • MongoDB
  • Redis
  • 时序数据库(如InfluxDB)

监控与告警集成

插件提供了丰富的监控指标,你可以:

  1. 集成到Prometheus监控系统
  2. 配置Grafana仪表盘
  3. 设置关键指标告警
  4. 分析消息流量趋势

从零到一的完整部署流程

环境准备清单

  • EMQX v4.3.10+ 环境
  • MySQL 5.7+ 数据库
  • Erlang/OTP 运行环境
  • Git 版本控制工具

部署步骤详解

  1. 获取源码:使用git clone命令下载插件
  2. 数据库准备:执行mysql.sql创建表结构
  3. 编译集成:将插件集成到EMQX项目中编译
  4. 配置调整:根据实际需求修改配置文件
  5. 测试验证:发送测试消息验证存储功能
  6. 生产部署:将编译好的EMQX部署到生产环境

测试验证方法

  1. 使用MQTT客户端连接到EMQX
  2. 订阅和发布测试消息
  3. 查询MySQL数据库确认数据存储
  4. 模拟网络中断测试重连机制
  5. 压力测试验证性能表现

你的物联网项目从此不同

emqx_persistence_plugin不仅仅是一个插件,它是你物联网项目数据可靠性的守护者。通过简单的配置,你就可以获得:

数据安全保障:再也不担心消息丢失历史追溯能力:随时查询任意时间点的数据分析决策支持:基于完整数据做出更明智的决策系统可观测性:全面监控消息流转状态

行动号召:不要再让宝贵的数据在内存中消失!立即尝试emqx_persistence_plugin,为你的EMQX项目加上数据持久化的翅膀,让每一个消息都有迹可循,每一次连接都有记录可查。

开始你的消息持久化之旅吧!只需几分钟的配置,就能获得长期的数据价值回报。🚀

【免费下载链接】emqx_persistence_plugin项目地址: https://gitcode.com/gh_mirrors/em/emqx_persistence_plugin

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

OBS多平台RTMP推流插件架构设计与性能优化策略

OBS多平台RTMP推流插件架构设计与性能优化策略 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 面对多平台直播内容分发需求&#xff0c;传统单平台推流方案存在操作繁琐、参数适配复杂和…

作者头像 李华
网站建设 2026/4/15 21:45:08

黑丝空姐-造相Z-Turbo效果实测:一键生成专业级空姐人像,效果惊艳

黑丝空姐-造相Z-Turbo效果实测&#xff1a;一键生成专业级空姐人像&#xff0c;效果惊艳 1. 模型效果惊艳展示 1.1 专业级人像生成质量 黑丝空姐-造相Z-Turbo模型在生成空乘人员专业形象方面表现出色。从实际测试来看&#xff0c;模型能够准确捕捉空乘人员的职业特征&#x…

作者头像 李华
网站建设 2026/4/16 13:26:31

缩空气储能和释能阶段模型➕相关文档文献。 建立了压缩空气储能系统中的压缩机、换热器、储气罐、透平、热水罐等设备的数学模型、 并在 Simulink仿真平台上

压缩空气储能和释能阶段模型➕相关文档文献。 建立了压缩空气储能系统中的压缩机、换热器、储气罐、透平、热水罐等设备的数学模型、 并在 Simulink仿真平台上、 按模块化建模方式完成了系统相关程序编写和仿真模型建立、 包含储能和释能两个阶段的模型压缩空气储能&#xff08…

作者头像 李华
网站建设 2026/4/15 14:33:23

025、AI应用后端开发:FastAPI框架与RESTful API设计

昨天深夜调试一个模型服务接口&#xff0c;客户端传过来的JSON里有个字段叫input_data&#xff0c;服务端定义的Pydantic模型里字段名是inputData。就这一个大小写差异&#xff0c;前端死活收不到推理结果。用FastAPI的自动文档试了一下才发现&#xff0c;默认配置下它严格区分…

作者头像 李华
网站建设 2026/4/16 9:20:16

如何用fast-copy实现JavaScript深度拷贝的极致性能优化

如何用fast-copy实现JavaScript深度拷贝的极致性能优化 【免费下载链接】fast-copy A blazing fast deep object copier 项目地址: https://gitcode.com/gh_mirrors/fa/fast-copy 在JavaScript开发中&#xff0c;对象深度拷贝是一个看似简单却暗藏性能陷阱的常见任务。当…

作者头像 李华
网站建设 2026/4/18 2:02:58

我不是在用 AI 助手,我在把自己的能力沉淀成组织资产删

1. 什么是 Apache SeaTunnel&#xff1f; Apache SeaTunnel 是一个非常易于使用、高性能、支持实时流式和离线批处理的海量数据集成平台。它的目标是解决常见的数据集成问题&#xff0c;如数据源多样性、同步场景复杂性以及资源消耗高的问题。 核心特性 丰富的数据源支持&#…

作者头像 李华