我们在位置A中有Mosquito代理,而Rabbit MQ在云中。我们已经联系了两个经纪人。来自Mosquito中配置的主题的数据将在Rabbit MQ中的AMQ.Topic中发布。
如果连接断开,将在重新建立连接后传递Mosquito代理商提供的数据。
在开发此类解决方案时,我们应该记住哪些事项?
答案 0 :(得分:10)
这取决于您如何配置网桥。
一般而言,MQTT客户端有两种类型,持久 / 持久性或非持久性 / 非持久性。连接时使用 clean session 标志进行控制。
当持久客户端连接(clean session设置为0)时,代理将在断开连接后维护有关该客户端的信息。这意味着该客户端的订阅以及可能在重新连接时准备好传递的消息(使用相同的客户端ID!)
默认情况下,根据MQTT规范,如果订阅和消息都使用大于0的QoS,则消息仅排队到断开连接的持久客户端.Mosquitto提供排队所有消息的能力,但这不是该规范涵盖了这些内容,因此您无法依赖其他经纪人。
还有其他警告 - 只有有限数量的邮件会排队等候离线客户端。这可以使用max_queued_messages
选项在mosquitto上配置。
当非持久客户端(干净会话设置为1)连接时,服务器在断开连接后将不会保留有关该客户端的任何信息。
如果客户端连接为持久性,然后重新连接为非持久性,则只要非持久版本连接,所有存储的信息都将被删除。
同样的原则适用于网桥,因此您需要将网桥配置为持久(干净会话0),并为您的消息使用QoS> 0。您还需要确保最大排队消息适合您的需要。