当订户未连接时,MQTT使用Qos 2发布

时间:2017-08-17 05:55:59

标签: c mqtt

我发布Qos = 2的消息,保留message = false并清除session = true。 如果我的订阅者处于离线状态,则再次联机时不会收到Qos 2消息。但是出版商成功获得了PUBREC和PUBCOMP

1 个答案:

答案 0 :(得分:4)

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

然后你保留message = false并且clean session = true,这意味着如果主题没有订阅者,那么发布的消息就会丢失。 考虑一些事情:

  • 保留消息标志可以用于"存储"关于某个主题的最新消息,这样当订阅者订阅时,它将收到这样的消息
  • clean session标志用于在订阅者离线时启用代理保存提示和所有消息

我不了解你的情景,但是:

  • 如果您希望离线订阅者在联机主题时收到最新发布的消息,请设置retain message = true
  • 如果您希望代理为其所有订阅保存脱机订阅者的所有消息,请使用clean session = false。通过在线返回,订阅者还可以避免重新订阅所有主题,因为它们由经纪人保留。