【问题标题】:What happens with messages in flight when a AWS IOT device disconnects and reconnects当 AWS IOT 设备断开连接并重新连接时,传输中的消息会发生什么情况
【发布时间】:2015-11-10 20:18:37
【问题描述】:

我有一台设备(又名“事物”)已成功连接到 AWS IOT。该设备将在使用移动网络的非常不可靠的电信环境中运行。这意味着该设备将在我的应用程序运行时频繁地连接和重新连接。

我知道 AWS IOT 的“影子”机制,但我的消息需要按顺序使用,这意味着我需要所有消息,而不仅仅是最后一个状态。

在断开和重新连接事件期间,正在传输的消息和有效负载会发生什么?

【问题讨论】:

    标签: amazon-web-services aws-iot


    【解决方案1】:

    我假设您使用 MQTT 进行通信。既然如此,这段摘自AWS IoT Developer Guide

    MQTT 是一种被广泛采用的轻量级消息传递协议,专为 受限设备。有关更多信息,请转到 MQTT。虽然 AWS IoT 消息代理实现基于 MQTT v3.1.1,它 偏离规范如下:

    • 在 AWS IoT 中,订阅服务质量 (QoS) 为 0 的主题意味着消息将被传递零次或多次。一条消息可能是 交付不止一次。多次发送的消息可能是 使用不同的数据包 ID 发送。在这些情况下,DUP 标志不 设置。
    • AWS IoT 不支持使用 QoS 2 发布和订阅。当 QoS 2 为 2 时,AWS IoT 消息代理不发送 PUBACK 或 SUBACK 请求。
    • [...]
    • 消息代理不支持持久会话(干净会话设置为 0)。假定所有会话都是干净的会话,并且 消息不会跨会话存储。如果 MQTT 客户端发送一个 将 clean session 属性设置为 false 的消息,客户端将 断开连接。
    • 在极少数情况下,消息代理可能会使用不同的数据包 ID 重新发送相同的逻辑发布消息。
    • 消息代理不保证接收消息和 ACK 的顺序。

    也就是说,AWS IoT MQTT 实施无法保证您设备消息的任何特定顺序。如果您绝对需要按顺序读取该数据,您可以实施某种方式来对数据进行分区并在设备影子状态中插入元数据,并使用 AWS IoT 规则或 AWS Lambda 重新排序该数据。

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2018-03-16
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 2017-06-10
      • 1970-01-01
      • 2019-07-19
      • 2023-01-05
      相关资源
      最近更新 更多