两个不同的 MQTT 代理可以相互通信吗?

Can two different MQTT brokers communicate with each other?

我目前正在探索在我的程序中使用 MQTT 协议的可能性,系统发现有几个不同的 MQTT 代理。所以,我的问题是,您可以为这种沟通混合搭配经纪人吗?例如,设备 1 上的 Mosquitto 代理和设备 2 上的 ActiveMQ 代理。这行得通吗?

我觉得这里可能有点误会

在一个简单的部署中,只有 1 个 MQTT 代理,多个 MQTT 客户端(在一个或多个设备上)将连接到这个代理并交换关于任何主题的消息。只要所有客户端都符合 MQTT 规范,那么它们应该能够成功连接到任何代理实现。

如果您想要更复杂的部署,则可以有多个代理并让客户端组连接到不同的代理。然后,您可以在代理之间设置所谓的桥梁,允许共享 some/all 个主题。这允许所有客户端共享消息,无论它们连接到哪个代理。

假设所有代理都符合 MQTT 规范(这很有可能),那么一切都应该可以正常工作,但是您配置网桥的方式因代理实现而异。

请注意,新版本的 MQTT 规范 (v5) 刚刚上线(2017 年底),经纪人和客户端库将在即将到来的 weeks/months 中进行更新以支持这一点。因此,请检查您尝试连接的版本。

通常有一种桥接模式将代理连接在一起,即使对于不同类型的代理,如 Mosquitto 和 ActiveMQ,这不仅是 MQTT 代理的概念,而且在其他消息队列中也是如此。此外,某些类型的代理支持集群,例如 RabbitMQ。官方 Mosquitto 只支持 bridge,但是 hui6075/mosquitto-cluster 上有一个集群的 mosquitto 实现,很容易部署。 此外,"cluster"和"bridge"最显着的不同是集群化后,整个broker看起来就像一个外部客户端的逻辑broker,如session、retain、qos等