在MQTT中,如果发布到没有订阅者的主题,则会删除该消息。
虽然这对于经典的发布/订阅消息传递来说很好,但是对于共享订阅(在MQTT 5中已引入)却不是那么好,因为这种模式通常用于某种作业队列,而您通常不这样做不想仅仅因为现在没有工作人员而放弃工作(也许它只是崩溃了并且正在重新启动)。
是否有可能告诉MQTT服务器不要丢弃消息,至少对于共享订阅,即使当前没有订阅者也是如此?如果可以,怎么办?
PS:这不仅是一个持久会话,因为我不想保留每个客户端的订阅。它更像是跨越多个客户端的“持久会话”。
答案 0 :(得分:-1)
我不知道任何支持MQTT v5共享订阅的代理是否支持此功能,但是我可以预见它可以以与发布/订阅消息传递的规范和精神相一致的方式工作。
MQTT代理会将具有当前会话的,当前处于脱机状态的客户端的消息排队在QOS 1或2处。因此,我认为共享订阅没有任何不同之处。我可以看到实现起来可能在技术上有些复杂,但是应该可以实现(您需要将共享组视为一个会话)。
那就是说,我认为共享订阅的主要重点是负载平衡,其次是HA。因此,除非您在同一台计算机上运行所有共享订户,否则它们不可能全部同时失败。