我想知道是否保留了消息发送顺序.也就是说,当发布者发送一系列消息时,每个订阅者是否保证收到与发布者发送的相同的序列?对于干净和持久的会话?
当发布者发送消息序列时,是否保证每个订阅者收到与发布者发送的序列相同的序列?
这个问题已经得到回答并被广泛接受,但我在接受的答案中发现以下声明存在问题。
QoS 2 消息将按顺序传递
根据文档,提到数据包的顺序PUBLISH将按PUBREC主题PUBREL跨级别消息PUBCOMP进行维护。QOS 2但是,订阅者仍然可以按照与发布者发布的顺序不同的顺序接收(可能但很少见)。同样的逻辑也适用于QOS 1。
让我们看看如何:
消息 m1 的代理已发送 PUBLISH 数据包。
消息 m2 的代理已发送 PUBLISH 数据包。
PUBREC 数据包已由消息 m1 的订阅者发送。
PUBREC 数据包已由消息 m2 的订阅者发送。
PUBREL 数据包已由消息 m1 的代理发送。但它被丢弃了。
PUBREL 数据包已由消息 m2 的代理发送。
PUBCOMP 数据包已由消息 m2 的订阅者发送。
消息 m1 的代理处 PUBREL 数据包发生超时。Broker 将重试消息 m1。
代理重新传输消息 m1 的 PUBREL 数据包。
PUBCOMP 数据包已由消息 m1 的订阅者发送。
通过上述顺序,消息m2有可能首先在接收方被处理。然而,m1 在 m2 之前发布。
有关更多详细信息,请参阅此答案。
图片取自u-blox。
| 归档时间: |
|
| 查看次数: |
6747 次 |
| 最近记录: |