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

时间:2018-04-03 17:46:02

标签: mqtt iot

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

简短回答,不。

客户无法知道哪些主题可能会在任何时候等待保留消息,请在订阅时单独使用。

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

唯一的迹象是第一个无保留消息的到达,因为经纪人应该(我认为)在任何新消息之前传递所有保留的消息。但是,如果对该主题的任何更新都可能被标记为保留,这可能没有帮助,那么您需要在不同的主题上使用(无保留)消息来获得感觉。

答案 1 :(得分:0)

如果您的经纪人支持aedesmosca之类的$SYS主题,则可以订阅$SYS/+/new/clients(对于Aedes)以在客户端连接时获得消息,因此,基于在@hardillb答案上,当您收到该消息时,这意味着已收到所有保留的消息,因为它将在所有保留的消息之后发送。