如果只有一个代理、一个发布者、一个主题和干净的会话,在这个简化的情况下,
能否保证订阅者端的消息传递顺序与发布者端的发送顺序相同?会受到QoS影响吗?
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 消息未正确确认,则可能会重新发送,这可能会导致它被重新传送到外部顺序。