MQTT Broker Bridge数据持久性

Siv*_*yan 3 mqtt mosquitto

我们在位置A有Mosquito代理,Rabbit MQ在云端.我们已经联系了两个经纪人.来自Mosquito中配置的主题的数据将在Rabbit MQ中的AMQ.Topic中发布.

如果失去连接,Mosquito经纪人提供的数据将在重新建立连接后传递.

在开发此类解决方案时,我们应该记住哪些事项?

ral*_*ght 10

这取决于您如何配置网桥.

在一般情况下,MQTT客户有两种类型,耐用/持续性非持久/非持久.连接时使用clean session标志控制.

耐用/持久的客户

当持久客户端连接(clean session设置为0)时,代理将在断开连接后维护有关该客户端的信息.这意味着该客户端的订阅以及可能在重新连接时准备好传递的消息(使用相同的客户端ID!)

默认情况下,根据MQTT规范,如果订阅和消息都使用大于0的QoS,则消息仅排队到断开连接的持久客户端.Mosquitto提供了对所有消息进行排队的功能,但这不包括在内.规范,所以你不能依赖它为其他经纪人.

还有其他警告 - 只有有限数量的消息将排队等待离线客户端.这可以使用该max_queued_messages选项在mosquitto上配置.

非持久性/非持久性客户

当非持久客户端(干净会话设置为1)连接时,服务器在断开连接后将不会保留有关该客户端的任何信息.

如果客户端连接为持久性,然后重新连接为非持久性,则一旦非持久版本连接,所有存储的信息将被删除.

桥梁

同样的原则适用于网桥,因此您需要将网桥配置为持久(干净会话0),并为您的消息使用QoS> 0.您还需要确保最大排队消息适合您的需要.