重新连接后阅读订阅的MQTT消息 [英] Reading subscribed MQTT messages after reconnect

查看:19
本文介绍了重新连接后阅读订阅的MQTT消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试读取MQTT服务器上的邮件。在某些情况下,连接不稳定,需要重新连接。但在重新连接后,我无法收到来自我之前订阅的主题的任何消息。我正在使用PAHO的python包来处理MQTT连接。以下是我使用的一些代码

TopicName='some/topic/name'

class Counter:
    def __init__(self, mqttClient):
        self.messages_recieved = 0
        self.mqttClient = mqttClient
        self.mqttClient.subscribe(TopicName)
        self.mqttClient.on_message = self.on_message
        self.mqttClient.on_disconnect = self.on_disconnect
        self.mqttClient.loop_start()

    def on_message(self, client, userdata, message):
        self.messages_received += 1

    def on_disconnect(self, client, userdata, rc):
        if rc != 0:
            print("Trying to reconnect")
            while not self.mqttClient.is_connected():
                try:
                    self.mqttClient.reconnect()
                except OSError:
                    pass

如果我的互联网出现故障,我将无法再接收消息。我尝试再次订阅该主题,并尝试在on_disconnect方法中调用loop_start,但这两种方法都不起作用。任何解决方案都会有帮助。另外,为了指出消息正在发送,我可以在MQTT墙上的浏览器中看到它们

推荐答案

您尚未显示调用Connect的位置,但通常的安全模式是将调用放在附加到客户端的on_connect()回调中。

这意味着对订阅的调用将

  1. 始终等到连接完成
  2. 重新连接发生时自动再次调用

这篇关于重新连接后阅读订阅的MQTT消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆