即使目前没有订阅者,如何告诉MQTT保留消息?

时间:2019-06-27 10:00:53

标签: mqtt

在MQTT中,如果发布到没有订阅者的主题,则会删除该消息。

虽然这对于经典的发布/订阅消息传递来说很好,但是对于共享订阅(在MQTT 5中已引入)却不是那么好,因为这种模式通常用于某种作业队列,而您通常不这样做不想仅仅因为现在没有工作人员而放弃工作(也许它只是崩溃了并且正在重新启动)。

是否有可能告诉MQTT服务器不要丢弃消息,至少对于共享订阅,即使当前没有订阅者也是如此?如果可以,怎么办?

PS:这不仅是一个持久会话,因为我不想保留每个客户端的订阅。它更像是跨越多个客户端的“持久会话”。

1 个答案:

答案 0 :(得分:-1)

我不知道任何支持MQTT v5共享订阅的代理是否支持此功能,但是我可以预见它可以以与发布/订阅消息传递的规范和精神相一致的方式工作。

MQTT代理会将具有当前会话的,当前处于脱机状态的客户端的消息排队在QOS 1或2处。因此,我认为共享订阅没有任何不同之处。我可以看到实现起来可能在技术上有些复杂,但是应该可以实现(您需要将共享组视为一个会话)。

那就是说,我认为共享订阅的主要重点是负载平衡,其次是HA。因此,除非您在同一台计算机上运行所有共享订户,否则它们不可能全部同时失败。