Advertisement

基于emq x开源版实现服务重启后主题及消息恢复的完整方案(二)

阅读量:

emqx_restart_resume

针对emqx开源版,在服务重启之后能够自动恢复原有的订阅主题以及持久化数据。

问题

  1. 在开源版emq中,当服务重启后,原本订阅的主题信息会被清除。若客户端维持原有的clientId且未重新建立会话并订阅相关主题,则无法接收到服务器转发的消息。
  2. 开源版的持久化机制仅保存主题下的最后一条消息,在系统重启后该消息内容同样会被清除。

解决方案

通过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)

还没有任何评论哟~