【问题标题】:MQTT paho client publish message and delete immediately the receiver consumes itMQTT paho 客户端发布消息并立即删除接收者使用它
【发布时间】:2019-01-20 05:13:48
【问题描述】:

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

【问题讨论】:

  • '无论是连接还是断开的接收者都应该消费这个消息'一个断开的接收者如何消费一个消息?
  • 当消费者断​​开连接并重新连接时
  • 好的,这更有意义。如果配置正确,代理会为一个主题存储一条消息。消费者在连接时会收到这条消息。您尝试哪种具体配置?
  • 您需要在这里更清楚地解释您的最终目标,您要避免的具体情况是什么?

标签: mqtt


【解决方案1】:

假设在 QOS2 上进行发布和订阅,消息只会被传递给订阅者一次,没有任何内容可以从任何地方删除。

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

MQTT 是一种 PUB/SUB 协议,因此旨在将订阅者与发布者完全分离。发布者不知道有多少订阅者,只知道它向给定主题发布了一条消息。

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

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

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

*一些 v3 代理已经实现了这个的专有版本。

【讨论】:

  • 谢谢#hardillb,也许我不太了解 mqtt 的概念,会详细了解它
猜你喜欢
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 2022-08-21
相关资源
最近更新 更多