即使现在没有订户,如何告诉MQTT保留消息?

即使现在没有订户,如何告诉MQTT保留消息?,mqtt,Mqtt,在MQTT中,如果发布到没有订阅服务器的主题,消息将被丢弃 虽然这对于经典的发布/订阅消息很好,但对于共享订阅(已在MQTT 5中引入)来说并不太好,因为这种模式通常用于某种作业队列,并且您通常不想因为现在没有工作线程而丢弃作业(可能它只是崩溃并重新启动) 是否可以告诉MQTT服务器不要丢弃消息,至少对于共享订阅,即使现在没有订阅者?如果是,怎么做 PS:这不仅仅是一个持久会话,因为我不想保留每个客户端的订阅。它更像是一个跨越多个客户端的“持久会话”。我不知道是否有支持MQTT v5共享订阅的代

在MQTT中,如果发布到没有订阅服务器的主题,消息将被丢弃

虽然这对于经典的发布/订阅消息很好,但对于共享订阅(已在MQTT 5中引入)来说并不太好,因为这种模式通常用于某种作业队列,并且您通常不想因为现在没有工作线程而丢弃作业(可能它只是崩溃并重新启动)

是否可以告诉MQTT服务器不要丢弃消息,至少对于共享订阅,即使现在没有订阅者?如果是,怎么做


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

我不知道是否有支持MQTT v5共享订阅的代理支持这一点,但我可以预见它的工作方式符合发布/订阅消息的规范和精神

MQTT代理将在QOS为1或2时为当前处于脱机状态的客户端订阅的主题的消息排队,并使用持久会话。所以我看不出为什么共享订阅会有什么不同。我可以看出,实现它在技术上可能有点复杂,但应该是可能的(您需要将共享组视为单个会话)


也就是说,我认为共享订阅的主要重点是负载平衡,其次是HA。因此,除非您在同一台计算机上运行所有共享订阅服务器,否则它们不太可能同时出现故障。

我在这里看到的主要问题不是所有工作服务器都故障,而是工作服务器和代理服务器之间的网络故障。您找到解决问题的方法了吗?如果是,请与我们分享。在我的例子中,我面临着同样的问题,这是我在MQTT和Kafka之间选择的一个关键因素。不幸的是,没有……事实上,我们放弃了MQTT,因为它还有其他缺点,相反,我们为此构建了一个自定义解决方案。