【发布时间】:2016-09-14 13:18:15
【问题描述】:
我们正在考虑将 AWS IoT 用于一个即将推出的项目,该项目包含网络连接不可靠的设备。一项要求是向设备发送命令。命令必须可靠地传递(确认),并且当命令稍后完成时,设备还应该发出成功/失败的信号。鉴于 AWS 不支持持久会话,似乎仅向 MQTT 主题发布命令并不能确保消息得到传递 - 对吗?
我们一直在推测将命令插入设备影子的“所需”状态内的命令数组中。然后,设备可以通过在影子的“已报告”状态下复制命令来确认命令的接收,并通过在“已报告”状态下设置命令中的结果字段来报告成功/失败。
鉴于我们缺乏使用 AWS IoT 的经验,这看起来是一种理智的方法吗?或者任何人都可以看到更整洁的东西吗?一件令人讨厌的事情是影子会累积已完成的命令,这大概意味着我最终需要某种内务处理来删除已完成的命令,以将影子保持在合理的大小。
最后,有谁知道带宽使用有多聪明——如果我的服务器将一个元素添加到嵌套在“所需”状态深处的一百个元素的数组中,实际上有多少数据流过网络?同样,当我的设备将元素移动到“已报告”状态时。
【问题讨论】:
-
将所有网络连接视为“不可靠”是一种很好的设计实践。在物联网领域,所有与设备的连接都必须被视为“不可靠的”。
-
是的。亚马逊没有完全实现 MQTT 是一个巨大的耻辱:它设计得很好,省略一些部分似乎有点弱。
标签: amazon-web-services mqtt iot aws-iot