0

我们正在考虑将 AWS IoT 用于即将推出的项目,该项目以网络连接不可靠的设备为特色。一项要求是向设备发送命令。命令必须可靠地传递(确认),并且当命令稍后完成时,设备还应该发出成功/失败的信号。鉴于 AWS 不支持持久会话,似乎仅将命令发布到 MQTT 主题并不能确保消息得到传递——对吗?

我们一直在推测将命令插入设备影子的“所需”状态内的命令数组中。然后,设备可以通过在影子的“已报告”状态下复制命令来确认命令的接收,并通过在“已报告”状态下设置命令内的结果字段来报告成功/失败。

鉴于我们缺乏使用 AWS IoT 的经验,这似乎是一种明智的方法吗?或者任何人都可以看到更整洁的东西吗?一件令人讨厌的事情是影子会累积已完成的命令,这大概意味着我最终将需要某种内务处理来删除已完成的命令,以将影子保持在合理的大小。

最后,有谁知道带宽使用有多聪明——如果我的服务器将一个元素添加到嵌套在“所需”状态深处的一百个元素的数组中,实际上有多少数据流过网络?同样,当我的设备将元素移动到“报告”状态时。

4

1 回答 1

0

您说得对,AWS IoT 不支持持久会话也不支持消息保留。

至于使用影子设备存储命令队列,这实际上取决于您拥有的命令的频率和种类。我能想到的:

  • 如果它只是不经常使用(例如每月一次),那么从管理和性能的角度来看,使用影子设备可能是好的。但是,如果每隔几分钟就执行几个命令,那么它很快就会变得巨大。

  • 如果只有少数类型的命令(没有参数)并且每次只需要执行一次,那么命令可能是键,而“真”/“假”是值。desired 可以设置“true”以指示设备应该执行它,然后一旦设备完成作业,它会报告“false”。

希望这对您有所帮助。

于 2016-09-14T21:03:33.747 回答