我正在研究亚马逊物联网作为移动设备定期测量数据的传输机制(通常每N分钟,N在2到32分钟之间)。通过MQTT,我可以利用亚马逊的经纪人将完成的测量结果发布给QoS = 1的订户。我们还假设我的唯一订阅者只是另一个侦听通配符主题的设备(例如abc /#)并将已发布的消息存储到本地数据库中。
但现在也有可能:
the publishing mobile devices have spotty/bad/no connection to the cell network,
the subscriber dies (reboots, software failure, hardware failure, maintenance, etc.)
假设我使用官方Java SDK。在至少其中任何一个离线的时候发布的数据会发生什么?用户是否会在重新连接时获得所有丢失的消息?
另外:这取决于相关协议吗?出于测试目的,我们使用WebSockets,但是后来的开发/生产,我们更喜欢MQTT而不是SSL。
答案 0 :(得分:1)
至少在这些时间发布的数据会发生什么 他们中的任何一个是离线?订阅者是否会收到所有消息 在重新连接时错过了什么?
是,如果您使用QoS级别为1或更高级别的MQTT,因为MQTT使用带有主题的发布者/订阅者体系结构。发往QoS等级为1及更高级别的主题的消息将在MQTT服务器的内存和磁盘(Atleast mosquitto)上显示消息,直到订阅者订阅为止。
WebSocket与众不同。它没有发布者/订阅者体系结构。它是单TCP连接上的双工通信模型。 WebSocket作为HTTP连接启动,将更新为WebSocket连接。对于WebSocket,应用程序负责确保与订阅服务器存在连接问题时会发生什么。