C语言 当订阅者未连接时,MQTT 使用 Qos 2 发布



我正在发布Qos=2的消息,保留消息=假和干净的会话=真。 如果我的订阅者处于离线状态,则再次在线时不会收到Qos 2消息。但出版商成功获得了PUBREC和PUBCOMP

它是 MQTT 协议规范,不依赖于您使用的代理。 发布者能够发布到代理,因此它接收 PUBREC 和 PUBCOMP,因为从发布者到代理的交付已完成。 在发布者和订阅者之间,您有中间的代理,因此有两个合约:发布者到经纪人,经纪人到订阅者。这些合同彼此独立。

然后,您有保留消息 = false 和干净会话 = true,这意味着如果该主题没有订阅者,则发布的消息将丢失。 考虑几件事:

  • 保留消息标志可用于"存储"主题上的最新消息,以便当订阅者订阅时,它将收到此类消息
  • Clean Session 标志用于使代理能够在订阅者脱机时保存 susbcriptions 和所有消息

我不知道你的情况,但是:

  • 如果希望脱机订阅者在主题联机时收到最新发布的消息,请将"保留消息 = true"设置为"保留消息 = true">
  • 如果希望代理为脱机订阅者的所有订阅保存所有消息,请使用 Clean Session = False。重新上线后,订阅者还可以避免重新订阅所有主题,因为它们由经纪人持有。

最新更新