嵌入式技术论坛
直播中

王尚岱

8年用户 1511经验值
擅长:电源/新能源
私信 关注
[问答]

umqtt如何接受离线消息呢?

umqtt的cleansession貌似不对用户开发,默认打开。
以下情景:umqtt如何接受离线消息呢?
umqtt客户端订阅主题后发生了异常掉线,重新发起订阅后如何接受掉线期间别人发布的消息?

回帖(2)

最强海贼王

2023-8-10 18:08:44
RyanMqtt支持配置cleanSession选项
举报

熊本熊

2023-10-13 10:34:11
如果使用umqtt默认的cleansession,即断线后将清除会话状态并取消所有订阅,那么该客户端将无法接收离线消息。在这种情况下,如果想要接收离线消息,则需要在重新建立连接时手动设置cleansession为False。例如:

```python
import umqtt.simple as mqtt

client = mqtt.MQTTClient("client_id", "broker_address", keepalive=60)

def sub_callback(topic, msg):
    # 处理订阅到的消息
    pass

client.set_callback(sub_callback)
client.connect(clean_session=False) # 连接并设置cleansession为False
client.subscribe("my_topic") # 订阅主题

while True:
    client.wait_msg()
```

这样,即使客户端在重新连接后,还是可以接收到离线期间别人发布的消息。

另一方面,如果使用umqtt的同步版本(如umqtt.robust),则无需手动设置cleansession为False,因为在异常掉线后,客户端会自动重连并恢复之前的会话状态,包括订阅和未接收的消息。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分