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



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

我认为这里可能存在轻微的误解。

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

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

假设所有代理都符合 MQTT 规范(这很有可能),那么这一切都应该正常工作,但代理实现之间的配置桥接方式有所不同。

请注意,MQTT 规范 (v5) 的新版本刚刚上线(2017 年底),代理和客户端库将在未来几周/几个月内更新以支持此功能。因此,请检查您尝试并连接的版本。

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

最新更新