MQTT 持久性会话 - AWS IoT
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

MQTT 持久性会话

持久性会话表示与 MQTT 消息代理的持续连接。当客户端使用持久会话连接到 AWS IoT 消息代理时,消息代理会保存客户端在连接期间所做的所有订阅。当客户端断开连接时,消息代理将未确认的 QoS 1 消息和发布的新 QoS 1 消息存储到客户端订阅的主题。当客户端重新连接到持久性会话时,将恢复所有订阅,并以每秒 10 条消息的最大速率将存储的所有消息发送到客户端。

通过发送将 cleanSession 标志设置为 0 的 CONNECT 消息来创建 MQTT 持久性会话。如果发送 CONNECT 消息的客户端不存在会话,则创建新的持久性会话。如果客户端已存在会话,则会恢复该会话。

客户端加入会话后,它可以继续发布消息并订阅主题筛选条件,而无需在每个操作上附加任何标记。以下条件描述了持久性会话的开始和结束方式。

  • 当客户端发送将 cleanSession 标志设置为 1 的 CONNECT 消息时,持久性会话将结束并且无法恢复。

  • 默认情况下,持久性会话在消息代理检测到客户端已断开连接一小时后过期。您可以配置此时间间隔。

  • 当客户端在会话过期后重新连接并将 cleanSession 标记设置为 0 时,服务会创建一个新的持久性会话。上一个会话的订阅和消息将被丢弃。

设备使用连接已确认 (CONNACK) 消息中的 sessionPresent 属性确定是否存在持久性会话。如果将 sessionPresent 设置为 1,则持久性会话存在,并且存储的消息会传输到客户端。这在设备收到 CONNACK 后立即开始。无需重新订阅。如果将 sessionPresent 设置为 0,则不存在持久性会话,并且客户端必须重新订阅主题筛选条件。

持久性会话的默认过期期限为 1 小时。当消息代理检测到客户端断开连接(MQTT 断开连接或超时)时,过期期限开始。可以通过标准限制增加过程来增加持久性会话过期期限。如果客户端在过期期限内没有恢复其会话,则会话终止并且丢弃任何相关的存储消息。过期期限是近似值。会话可能最多比配置的持续时间多 30 分钟,但不能比配置的持续时间少。有关更多信息,请参阅 AWS 服务配额。为持久性会话存储的任何消息都将以标准消息收发费率进行计费。有关更多信息,请参阅 AWS IoT Core 定价

CONNECT 消息cleanSession 标志由 MQTT 协议定义。更高级别的接口(如 AWS IoT 设备和移动开发工具包 提供的接口)中的支持方式可能会有所不同。有关如何支持 cleanSession 标志的信息,请参阅开发工具包的文档。