【问题标题】:Receive MQTT from multiple servers using Mosquitto brokier使用 Mosquitto brokier 从多个服务器接收 MQTT
【发布时间】:2020-11-23 17:28:20
【问题描述】:

我有三个虚拟机(VirtualBox,Ubuntu 18.04)。它们都带有 Mosquitto 代理(配置为默认 localhost:1883)。两个 VM 是具有私有 IP 的 PUB,而“服务器”是一个 SUB(通过 DHCP -bridged- 分配)。我所拥有的是:

VM1 (PUB) [192.168.1.66]
VM (SUB) [192.168.1.55]   
VM2 (PUB) [192.168.1.74]

这个想法是 SUB 从所有 PUB 接收 MQTT,但是,它只有在 MQTT 客户端配置如下时才有效

VM1 [192.168.1.66:1883] --> VM [192.168.1.66:1883]  <--  VM2 [192.168.1.74:1883]

因此,SUB 将只接收来自 VM1 的消息,而不会接收来自 VM2 和其他 VM (PUB) 的消息。如何配置 mosquitto 和 SUB 的客户端以接收来自所有 PUB 的消息?

【问题讨论】:

  • 为什么要运行多个代理?
  • MQTT Broker 既不是 SUB 也不是 PUB ......他们只是从 Publisher 接收 MQTT 消息,并将这些消息发送给订阅了该主题的客户端。那么你真正想要达到什么目的呢?最终结果是什么样的??

标签: mqtt publish-subscribe mosquitto


【解决方案1】:

一个 MQTT 客户端实例只能连接到单个 MQTT 代理。

你有两个选择。

  1. 在 3 台机器中的任何一台上只运行一个代理,并让所有发布客户端发布到该代理,同样也发布到订阅者。

  2. 您可以将其中一个代理配置为桥接到所有其他代理并订阅在这些代理上发布的任何消息,以便它们出现在该单个代理的主题层次结构中。

    如何配置mosquitto桥的详细信息可以在手册页here中找到

【讨论】:

  • 我对第一个选项的问题是客户端 MQTT 没有正确发送消息。所以,我会选择第二个选项,但是,在这种情况下,发件人 IP 应该添加到 mosquitto.conf 中,有没有办法自动附加 IP。我的意思是,我手动添加 VM1 IP 但 VM2 想要发布他们的消息并被桥接,桥接代理如何知道新发布者的 IP 并可以自动添加它?
  • 不,消息中没有关于发布者的信息(除非发布者添加它),这不是 MQTT 的工作方式
  • 您的第一条评论没有意义,从发布客户端的角度来看,发布到本地主机和发布到远程代理没有区别。
  • 您提供的关于配置网桥的链接如下:地址address[:port] [address[:port]], addresses address[:port] [address[:port]]Specify the address and optionally the port of the bridge to connect to. This must be given for each bridge connection。我知道 MQTT 不能通过 IP 工作,而是通过主题工作,但是 mosquitto.conf 需要桥的 IP 地址才能连接。
  • 是的,消息是根据主题发布/订阅的,但那是在您连接到代理之后,您需要知道要连接的代理的 IP 地址。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多