我目前正在探索在我的程序中使用MQTT协议的可能性,系统发现有几种不同的MQTT代理。所以,我的问题是,你可以混合和匹配经纪人进行这种沟通吗?例如,设备1上的Mosquitto代理和设备2上的ActiveMQ代理。这会起作用吗?
答案 0 :(得分:4)
我认为这里可能存在轻微的误解。
在一个简单的部署中,只有1个MQTT代理,多个MQTT客户端(在一个或多个设备上)将连接到这个代理并交换任何主题的消息。只要所有客户端符合MQTT规范,那么它们应该能够成功连接到任何代理实现。
如果您想要更复杂的部署,那么可以拥有多个代理并让客户组连接到不同的代理。然后,您可以设置所谓的代理之间的桥梁,以便共享部分/全部主题。这允许所有客户端共享消息,无论他们连接到哪个代理。
假设所有代理都符合MQTT规范(很可能),那么这一切都应该正常工作,但是如何配置网桥在代理实现之间有所不同。
请注意,新版本的MQTT规范(v5)刚刚上线(2017年底),经纪商和客户端库将在未来几周/几个月内进行更新以支持此功能。因此,请检查您尝试和连接的版本。
答案 1 :(得分:2)
是。两个不同的MQTT代理可以相互通信。 Mosquitto代理和ActiveMQ代理可以一起工作,但只需要将其中一个代理配置为充当桥梁。 Mosquitto(以及其他一些MQTT经纪人)有一个称为桥接的功能,它基本上允许您将两个或多个代理连接在一起。
可以将Mosquitto代理(服务器)配置为MQTT桥。通过桥,您可以将两个MQTT代理连接在一起。它们通常用于在系统之间共享消息。常见的用法是将边缘MQTT代理连接到中央或远程MQTT网络。
请参阅MQTT社区的Bridge Protocol和Mosquitto Bridge Configuration。 这个(mosquitto.conf - Configuring Bridges)将有助于将MQTT代理配置为桥接。
答案 2 :(得分:1)
通常有一种桥接模式可以将代理连接在一起,即使对于不同类型的代理,例如Mosquitto和ActiveMQ,这不仅是MQTT代理中的概念,也是其他消息队列中的概念。此外,某些类型的代理支持集群,例如RabbitMQ。官方的Mosquitto只支持桥接,但在hui6075/mosquitto-cluster上有一个集群的mosquitto实现,它易于部署。 此外,与“集群”和“桥接”最显着的不同之处在于,对于集群,整个代理看起来像是外部客户端的一个逻辑代理,例如session,retain,qos等。