提问者:小点点

ActiveMQ Artemis上的MQTT监听器-如何确保订阅者使用所有消息(不仅仅是最新消息)


我想使用ActiveMQ Artemis作为MQTT代理,以确保MQTT主题的所有订阅者都将收到MQTT消息,而不仅仅是最新的消息。

例如,MQTT订阅者崩溃并暂时无法接收消息。当订阅者重新上线时,它应该会收到所有已发布到主题的消息。

从这篇文章中,给出了以下图表:

似乎通过将QOS设置为1并将保留设置为true,所有发送到主题的消息都将被保存,直到它们被订阅者消费。是这样吗?

如果有必要,我可以在主题中添加UUID。例如,发布到主题mytopic/13234141431432并订阅mytopic/#。然而,为了简单起见,第一个选项更可取。


共1个答案

匿名用户

保留与QOS交付要求不同。

设置保留标志只会告诉代理保留设置了保留标志的给定主题的最后一条消息,并始终将该消息传递给任何新订阅者(包括已离线的返回客户端)。保留是如何确保客户端始终获得主题的当前状态/最后状态,而不是任何前面的消息。(保留的消息也可以在任何排队的消息之前传递)

如果您想确保所有错过的消息都传递到已脱机的客户端,您必须在QOS 1或2发布和订阅,并确保重新连接时清洁会话标志为假。