基于emq x开源版实现服务重启后主题及消息恢复的完整方案(二)
发布时间
阅读量:
阅读量
emqx_restart_resume
针对emqx开源版,在服务重启之后能够自动恢复原有的订阅主题以及持久化数据。
问题
- 在开源版emq中,当服务重启后,原本订阅的主题信息会被清除。若客户端维持原有的clientId且未重新建立会话并订阅相关主题,则无法接收到服务器转发的消息。
- 开源版的持久化机制仅保存主题下的最后一条消息,在系统重启后该消息内容同样会被清除。
解决方案
通过EMQ X Web Hook插件将时间信息发送至特定请求地址,结合Redis与EMQ X内置的Web API实现功能扩展,相关技术细节可参见博文了解详情
- 本方案基于emqx 3.2.7版本进行功能优化
- 将原本使用的message_publish传输方式调整为UDP协议
- 对于client_connected、session_subscribed、session_unsubscribed等事件处理改用HTTP协议实现
- EMQX服务启动后,首先使用内部11883端口完成消息持久化恢复操作,待恢复完成后开启1883端口进行监听
- 当clear_session=False的客户端成功建立连接后,执行已订阅主题的查询操作,并对未订阅的主题进行恢复处理
- Redis采用源码编译方式部署,同时启用RDB与AOP两种
全部评论 (0)
还没有任何评论哟~
