当前位置: 代码迷 >> 综合 >> [Mosquitto]如何断线重连时接收离线消息
  详细解决方案

[Mosquitto]如何断线重连时接收离线消息

热度:102   发布时间:2023-11-11 03:15:39.0

MQTT中的mosquitto简单使用以及订阅离线消息

要想在客户端重连时马上收到离线时的消息,必须要确保两点:1)自身的client_id缓存在了MQ服务器上。2)消息的服务质量为“至少一次”或“只有一次”。

  • 缓存客户端,持久会话:启动客户端时设置客户端id和不清除客户端缓存,以接收离线消息

    • js:

      const options = {
              clientId: 'mina/1',clean:false
      };
      const client = mqtt.connect(host, options);
      
    • python:

      # clean_session为False时,会在重连时收到qos>0的所有消息
      client = mqtt_client.Client(client_id="printer-A", clean_session=False,transport='websockets')
      
  • 订阅/发布Qos>=1的消息:在订阅或发布时可以附带服务质量(Qos)的参数设置

    • js:

      client.subscribe('mobile/111', {
              qos: 1});
      client.publish('printer/aaa', "Ok", {
              qos: 1})
      
    • python:

      client.subscribe("printer/aaa", qos=1)
      client.publish("mobile/111", "Ok", qos=1)
      

注意clean_session=false时可以主动接收flag参数,如果为true,说明此次连接为重连,会获取存储的缓存信息(包括之前的订阅主题,但由于默认重新订阅会不断覆盖,所以不会出现重复订阅导致消息重复的问题)。

MINE MIND系列将在我的GitHub上实时更新,同时精选部分汇总于CSDN专栏
GitHub仓库:https://github.com/IcyLeaves/MINE-MIND
CSDN专栏:https://blog.csdn.net/qq_37398834/category_10975647.html