我有一台设备(AKA'thing')成功连接到AWS IOT。该设备将使用移动网络在非常不可靠的电信公司环境中运行。这意味着在我的应用程序运行时,此设备将频繁连接和重新连接。
我知道AWS IOT'影子'机制,但我的消息需要按顺序消耗,这意味着我需要所有消息,而不仅仅是最后一个状态。
在断开连接和重新连接事件期间,飞行中的消息和有效负载会发生什么?
答案 0 :(得分:3)
我假设您正在使用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为QoS时,AWS IoT消息代理不发送PUBACK或SUBACK 请求。
- [...]
- 消息代理不支持持久会话(干净会话设置为0)。假设所有会话都是干净的会话 消息不会跨会话存储。如果MQTT客户端发送 将clean会话属性设置为false的消息,客户端将 断开连接。
- 在极少数情况下,消息代理可能会重新发送具有不同数据包ID的相同逻辑发布消息。
- 消息代理不保证收到消息和ACK的顺序。
也就是说,AWS IoT MQTT实施无法保证您设备的任何特定订单。消息。如果您绝对需要按顺序读取数据,则可以采用某种方式对数据进行分区并在设备阴影状态下插入元数据,并使用AWS IoT规则或AWS Lambda重新排序数据。