确保始终发送 MQTT 消息,即使在代理关闭时也是如此
Posted
技术标签:
【中文标题】确保始终发送 MQTT 消息,即使在代理关闭时也是如此【英文标题】:Ensuring MQTT messages are always sent, even when broker is down 【发布时间】:2022-01-17 10:24:19 【问题描述】:当我向物联网平台发送 MQTT 消息时,我有一个应用程序,物联网平台有自己的代理。问题出现在经纪人宕机 2-3 天时,我丢失了 2-3 天的数据。
我想知道是否有一种方法可以确保存储所有数据点,然后在代理按顺序重新联机时发送。我一直在用 Mosquitto 对此进行测试,但我似乎无法让它工作。
这是使用服务质量 (QoS) 的问题吗?即使经纪人关闭,这也能工作,还是需要经纪人与之通信?还是我需要使用持久性或保留?
【问题讨论】:
这将是您正在使用的 MQTT 客户端库的属性,而不是代理(因为它已关闭,它无法执行任何操作)。 【参考方案1】:是的,你在正确的轨道上,它需要QoS并且必须与其他设置一起使用,你可以在以下条件下测试:
使用设置为 False
的干净会话标志和唯一的客户端 ID 来初始化您的 MQTT 客户端;
这是一个使用 Paho python 库的示例,
mqttc = mqtt.Client("specify_a_unique_client_id", clean_session=False)
订阅一个 QoS >= 1 的主题;
发布到 QoS >= 1 的主题;
注意:您必须指定唯一的客户端 ID,以便您的代理在重新连接时仍能识别之前的客户端会话。将客户端 ID 留空将自动生成一个新的。
红利,这里有一个很好的系列articles来解释MQTT中的所有配置,以防你想了解细节。
【讨论】:
以上是关于确保始终发送 MQTT 消息,即使在代理关闭时也是如此的主要内容,如果未能解决你的问题,请参考以下文章
如何从网站向不支持 Websockets 的 MQTT 代理发送消息?
即使网络中断,如何继续在 websockets 中发送消息?