MQTT Broker Bridge 数据持久化

MQTT Broker Bridge data persistence

我们在位置 A 有 Mosquito 代理,Rabbit MQ 在云中。我们已经桥接了两个经纪人。 Mosquito 中配置的主题中的数据正在 Rabbit MQ 中的 AMQ.Topic 中发布。

如果连接丢失,Mosquito broker 上的可用数据是否会在重新建立连接后继续传递。

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

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

通常,MQTT 客户端有两种类型,持久/持久非持久/非持久性。这是在连接时使用 clean session 标志控制的。

Durable/Persistent 客户

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

默认情况下,根据 MQTT 规范,如果订阅和消息都使用大于 0 的 QoS,消息只会为断开连接的持久客户端排队。Mosquitto 提供了对所有消息进行排队的功能,但这规范未涵盖,因此您不能将其用于其他经纪商。

还有其他注意事项 - 只有有限数量的消息会排队等待离线客户端。这可以使用 max_queued_messages 选项在 mosquitto 上配置。

Non-Durable/Non-Persistent 客户

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

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

桥梁

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