实现了MQTT的低功耗智能锁的WiFi 模组经常会断电然后重启(为了低功耗),同样的订阅主题和ClientId,如何做到重启后重新连接和订阅(模组这么设计的,改不了)也能接收到离线消息?

环境信息

  • EMQ X 版本:开源4.3.8
  • 操作系统及版本:阿里云ECS服务器 CentOS 7.8
  • 其他

问题描述

客户端是使用干电池的低功耗智能锁,通过实现了MQTT的WiFi模组与emqx broker通信。有固定的 ClientID和固定的订阅主题,clean_session 为 false,且 QoS 设置满足服务器端的配置要求。如果只是断开网络连接然后重新连接,可以收到离线消息。当模组断电然后重启,再连接和订阅,会接收不到离线消息。因为模组改不了了,它重启后只会重新连接和订阅, 如何做到同样的clientID和订阅主题重新连接和订阅也能收到离线消息呢?

配置文件及日志

理论上在会话未退出前,重新连接都能收到保留的离线消息
对于emqx来说,客户端怎么断线、怎么重连都没有关系

您好,可以通过代理订阅(离线后重连自动订阅相关主题)和通过qos1/2,将离线消息缓存到数据库里(redis、mongoDB、mysql等),客户任何时候重连都可以获取到消息。这两个功能是企业付费版的基础功能,如果用开源版你们也可以基于这个思路自己开发。如需咨询企业版,可以联系EMQ官方客服。