如果只有一个代理、一个发布者、一个主题和干净的会话,在这个简化的情况下,
能否保证订阅者端的消息传递顺序与发布者端的发送顺序相同?会受到QoS的影响吗?
Section 4.6 http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718105来自 MQTT 3.1.1spec http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html涵盖消息排序:
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 消息,则可能会重新发送,这可能会导致消息不按顺序重新传送。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)