可以在简化的情况下保证mqtt msg的交货顺序吗?

时间:2016-06-29 08:42:10

标签: mqtt paho

如果在这个简化的情况下只有一个代理,一个发布者,一个主题和干净会话,

订户端的消息传递订单是否可以保证与发布方的发送订单相同?它会受到QoS的影响吗?

1 个答案:

答案 0 :(得分:0)

MQTT 3.1.1 4.6中的spec部分涵盖了消息排序:

  

4.6消息排序

     

客户端在实施协议流时必须遵循这些规则   在本章的其他地方定义:

     
      
  • 当它重新发送任何PUBLISH数据包时,它必须按照发送原始PUBLISH数据包的顺序重新发送它们(这适用于   QoS 1和QoS 2消息)[MQTT-4.6.0-1]
  •   
  • 它必须按照接收相应PUBLISH数据包的顺序发送PUBACK数据包(QoS 1消息)   [MQTT-4.6.0-2]
  •   
  • 它必须按照接收相应PUBLISH数据包的顺序发送PUBREC数据包(QoS 2消息)   [MQTT-4.6.0-3]   它必须按照接收相应PUBREC数据包的顺序发送PUBREL数据包(QoS 2消息)   [MQTT-4.6.0-4]
  •   
     

默认情况下,服务器必须将每个主题视为"有序主题"。它   可以提供允许一个或多个的管理或其他机制   被视为"无序主题的主题" [MQTT-4.6.0-5]。

     

当服务器处理已发布到的邮件时   订购主题,在交付时必须遵循上面列出的规则   给每个订阅者的消息。另外它必须发送PUBLISH   按顺序分配给消费者(对于相同的主题和QoS)   他们是从任何给定的客户[MQTT-4.6.0-6]收到的。

读完之后我会得出消息通常(除非经纪人专门设置使用无序主题)按顺序发送,但如果高QOS消息未被正确确认,则可能会重新发送,这可能导致重新传送不按顺序。