python 如何不丢失任何MQTT消息

yyyllmsg  于 2023-02-11  发布在  Python
关注(0)|答案(2)|浏览(322)

我刚开始使用MQTT。我已经设置了一个Arduino将MQTT消息发布到ActiveMQ。我还有一个订阅了相同主题的Python脚本(使用paho),该脚本从代理获取数据并将其插入到数据库中。
问题是如果这个Python脚本关闭或者由于任何原因失去连接,我会丢失所有在它关闭时发布的消息。我如何确保所有数据都插入到数据库中?我看到ActiveMQ有某种存储,是否可以从中检索历史数据?

t40tm48m

t40tm48m1#

如果您想确保订阅持续存在并且即使订阅者断开连接也能接收消息,那么您需要在MQTT客户端上设置CleanSession=false(假设您使用的是MQTT 3.x),并在重新连接时使用相同的客户端ID。
此外,如果您希望消息在代理重新启动或崩溃后仍然存在,则需要使用QoS 1发送它们。

x0fgdtte

x0fgdtte2#

我认为PubSubClient Arduino库只发布了“触发并忘记”(QoS 0)。我使用stomp.py库创建订阅同一主题的持久消费者。如果Arduino上没有连接,则将其保存到SD卡;如果有连接但没有客户端,则消息将由ActiveMQ存储,直到客户端处于活动状态。
这解决了我的问题,但我仍在测试耐用性

相关问题