如何不丢失任何MQTT消息

问题描述 投票:0回答:2

我刚开始使用 MQTT。我已经设置了一个 Arduino 将 MQTT 消息发布到 ActiveMQ。我还有一个订阅同一主题的 Python 脚本(使用 paho),它从代理获取数据并将其插入数据库。

问题是,如果此 Python 脚本因任何原因关闭或失去连接,我会丢失其关闭期间发布的所有消息。如何确保所有数据都插入到数据库中?

python mqtt paho
2个回答
0
投票

如果您想确保您的订阅持续存在并接收消息,即使订阅者断开连接,那么您需要在 MQTT 客户端上设置 CleanSession=false(假设您使用的是 MQTT 3.x),并在您使用相同的客户端 ID 时使用相同的客户端 ID。重新连接。

此外,如果您希望消息在代理重新启动或崩溃后继续存在,您需要以 QoS 1 发送它们。


-1
投票

我认为 PubSubClient Arduino 库仅以即发即忘的方式发布(QoS 0)。相反,我使用 stomp.py 库来创建订阅同一主题的持久消费者。如果 Arduino 上没有连接,它会保存到 SD 卡,如果有连接但当时没有客户端,则消息将由 ActiveMQ 存储,直到客户端处于活动状态。

这解决了我的问题,但我仍在测试耐用性

© www.soinside.com 2019 - 2024. All rights reserved.