MQTT Paho客户端发布消息并立即删除,接收方将其消耗掉

时间:2018-08-13 12:55:07

标签: mqtt

我一直在尝试与paho mqtt客户端一起以mosquitto作为代理来发布和接收消息,并且工作正常。我的用例虽然涉及发送方将消息发布到代理并断开连接,但此时,接收方(无论连接还是断开)都应使用此消息并立即将其删除。我已经使用了所有属性,例如QOS,保留的消息,干净的会话等,但没有一个产生我想要的结果。请帮忙。

1 个答案:

答案 0 :(得分:0)

假设在QOS2上进行发布和订阅,则消息将仅被发送一次给订户,没有任何内容可以从任何地方删除。

如果您试图确保仅由一个特定客户端使用该消息,那么我认为您对MQTT是什么有误解。

MQTT是PUB / SUB协议,因此被设计为完全将订户与发布者分离。发布者不知道有多少订阅者,只是它已经发布了给定主题的消息。

0到N个客户端(其中N可以是任何数量)可以订阅该主题。客户端可以使用QOS,永久订阅和干净会话标志向代理指示,它希望接收自上次连接以来发布的任何消息,但这不会影响也可能已订阅该主题的任何其他客户端。 / p>

从MQTT协议v5开始(截至2018年9月,大多数经纪人和客户端当前仍仅支持v3)包含称为共享订阅*的内容,可用于将给定主题的消息轮流传递给一组客户端,因此仅集合中的1个将收到此消息,但这不会阻止不属于该组的客户端也收到该消息。

最后一个带有设置为主题的保留标志集的消息将在订阅该主题时传递给所有客户端。可以通过发布带有空有效负载和保留标志集的新消息来清除此消息。客户端可以在收到保留的消息后立即发布这样的消息,但是仍然会有一个计时窗口,其他客户端可以订阅并接收保留的消息。

*某些v3代理已实现了此版本的适当版本。