MQTT:如何知道何时收到了所有保留的消息

标签 mqtt iot

订阅 MQTT 主题(可能包含通配符)后,有没有办法确定已收到订阅主题的所有保留消息?

(更准确地说:订阅时存储在代理处的所有消息都保留了消息)

如果没有直接的方法,是否有任何技巧可以知道它(例如向订阅的主题发送具有特定 QoS 的新保留消息,这肯定是在旧消息之后收到的)?

我的问题的背景是我想要实现的这个功能请求( https://github.com/marvinroger/homie-esp8266/issues/313 )。

所以这将是带有 AsyncMQTT 库的 arduino (ESP8266) 的引用实现,但我的问题通常也适用于其他实现(例如使用 paho-mqtt 等)。

最佳答案

简短的回答,没有。

客户端无法知道哪些主题可能随时有保留消息等待它们,更不用说订阅时了。

您唯一能做的就是确保您在 QOS 1 或 2 订阅,此时经纪人将尽一切努力将它们交付给您。

唯一的迹象是第一个没有保留的消息的到达,因为代理应该(我认为)在任何新消息之前传递所有保留的消息。但是考虑到对该主题的任何更新都可能被标记为保留以及可能无济于事,您需要有关不同主题的(未保留)消息来感受一下。

关于MQTT:如何知道何时收到了所有保留的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49636231/

相关文章:

scala - AWS Lambda - 如何获取来自 AWS IOT 的数据的主题名称

android - Android 和 MQTT 的动态 channel

mqtt - 如何发现支持MQTT的局域网中的所有设备?

azure - 无法创建 IoT 中心设备组。找不到支持的设备更新标签

amazon-web-services - AWS IoT + 多环境 (dev/qa/uat/prod)

Android Studio - MQTT 未连接

flutter - 在flutter中使用Google Cloud pub sub实现MQTT

c# - Azure sb lite 连接字符串和事件中心兼容名称

python - 如何在Python Azure IoT Hub客户端SDK中为mqtt发布消息设置QoS级别0?

Javascript - 如何从 MQTT 将变量值插入数据库