【问题标题】:Bridging an MQTT broker to 2 remote MQTT brokers simultaneously同时将一个 MQTT 代理桥接到 2 个远程 MQTT 代理
【发布时间】:2018-08-05 13:43:06
【问题描述】:

我们在不同的场所安装了许多本地网关。这些网关将托管一个用于连接所有本地服务的 MQTT 代理。然后需要本地 MQTT 代理将此数据发送到两个远程 MQTT 代理(每个都由不同的方托管)。我已阅读有关 Mosquitto 和 VerneMQ 代理的文档,我发现它们一次只允许桥接一个远程服务器。

是否有其他(开源)代理提供此类功能?如果不是,我们怎么能做到这一点?

【问题讨论】:

    标签: mqtt mosquitto mqtt-vernemq


    【解决方案1】:

    感谢 Hardillb。同样在我的情况下,我使用了客户端 ID,显然它们需要每个桥块是唯一的:

    例如

    connection solace.cloud
    address <mqtt address>:<port>
    remote_username <username>
    remote_password <password>
    clientid Alpha
    try_private false
    start_type automatic
    topic Nasdaq/ out 0 b1/ ""
    topic Nasdaq/ in 0 "" b2/
    
    connection cloudmqtt
    cleansession true
    address postman.cloudmqtt.com:<port>
    remote_username <username>
    remote_password <password>
    clientid Beta
    try_private true
    start_type automatic
    topic Nasdaq/# out 0
    topic Nasdaq/# in 0
    

    【讨论】:

      【解决方案2】:

      您可以使用 mosquitto 声明任意数量的桥梁。

      来自mosquitto.conf 手册页:

      配置网桥

      可以配置多个网桥(连接到其他代理) 使用以下变量。

      你只有多个以connection开头的块

      connection test-mosquitto-org
      address test.mosquitto.org
      cleansession true
      topic clients/total in 0 test/mosquitto/org $SYS/broker/
      
      connection foo.broker.org
      address 192.168.1.1
      topic # both 0
      

      【讨论】:

      • 那么在这种情况下,本地代理会将选定的主题发布到所有桥接代理?因此,根据您的示例,它将是 test.mosquitto.org 和 192.168.1.1?
      • 是的,但是根据每个配置块中的topic 行,发布/订阅的主题是不同的。查看链接到文档以了解详细信息
      • 我在文档中遗漏的部分是我可以指定多个连接名称来建立多个网桥。那以及为后备指定多个地址的选项让我感到困惑,我看不出如何同时设置多个代理。谢谢。