1

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

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

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

4

1 回答 1

3

我假设您正在使用 MQTT 进行通信。既然如此,这段摘录摘自AWS IoT 开发人员指南

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

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

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

于 2015-11-10T12:18:37.127 回答