AWS IoT 持久会话(Persistent Sessions)能否保障订阅消息的有序性?
AWS IoT持久会话消息顺序问题解答
核心结论:AWS IoT的持久会话(Persistent Sessions)特性本身不会额外提供全局的消息接收顺序保障,消息顺序规则和未开启持久会话时的默认规则完全一致。
具体规则说明:
- 同主题、同一QoS等级、由同一客户端发布的消息,无论是否开启持久会话,AWS IoT都会按照发布顺序投递到订阅端,这是服务默认提供的能力,和持久会话无关。
- 持久会话的核心作用是缓存客户端断开连接期间应接收的QoS 1、QoS 2等级消息,等客户端重新建立连接后补投这些离线消息。补投的离线消息依然遵循「同主题同QoS按发布顺序投递」的规则,不会出现同主题同QoS的旧消息晚于新消息投递的情况。
- 以下场景无论是否开启持久会话都可能出现消息乱序,持久会话无法解决这类问题:
- 同一主题下混用不同QoS等级的消息,例如同时发送QoS 0和QoS 1的消息,QoS 0消息不需要等待确认,可能早于QoS 1消息到达订阅端
- 跨不同主题的消息,AWS IoT不对不同主题之间的消息投递顺序做任何承诺
- 多客户端并发向同一个主题发布消息,不同客户端发布的消息顺序不做保证
如果业务需要严格的全局消息顺序,建议在消息Payload中自行增加序列数字段,订阅端收到消息后按序号自行排序处理。
内容的提问来源于stack exchange,提问作者Guilty
相关产品推荐
相关产品推荐

