【问题标题】:Mosquitto MQTT Bridge ErrorMosquitto MQTT 桥接错误
【发布时间】:2017-03-17 10:58:51
【问题描述】:

我正在尝试将我的本地 (Windows) MQTT mosquitto 代理桥接到 test.mosquitto.org。不幸的是,它引发了一个未知错误。

我使用的配置与此问题中使用的配置相同 Verify that local mosquitto MQTT Broker is bridged to test.mosquitto.org

配置文件:

connection test
address test.mosquitto.org
topic oust_topicst_topic out 0
try_private false
notifications false
bridge_attempt_unsubscribe true

输出:

1489747961: mosquitto version 1.4.11 (build date 20/02/2017 23:24:29.40) starting
1489747961: Config loaded from Configurations/bridge.conf.
1489747961: Opening ipv6 listen socket on port 1883.
1489747961: Opening ipv4 listen socket on port 1883.
1489747961: Bridge local.NicolasJourdan.test doing local SUBSCRIBE on topic oust_topicst_topic
1489747961: Connecting bridge test (test.mosquitto.org:1883)
1489747961: Bridge NicolasJourdan.test sending CONNECT
1489747961: Error creating bridge: Unknown error.
1489747961: Warning: Unable to connect to bridge test.
1489747969: mosquitto version 1.4.11 terminating

什么会导致这个错误?我没有运行另一个 mosquitto 实例,并且 test.mosquitto.org 已启动

【问题讨论】:

  • 如果在命令行中添加 -v 以启用详细日志记录会得到什么?
  • 这已经是详细日志记录的输出了。如果我不添加 -v 则没有输出。是否有另一个带有扩展消息或类似内容的日志文件?
  • 好的,该配置在我的 Linux 机器上运行良好。您是否尝试过关闭您拥有的任何防火墙?你也可以在同一台机器上 ping test.mosquitto.org 吗?
  • 我现在已经尝试过,但仍然无法正常工作:(我可以 ping 代理。具有讽刺意味的是,它也可以在同一网络中的 linux 机器上工作!
  • 我认为mosquitto的安装也很好。如果我只是在本地启动它就可以了。只有桥没有。如果我启动 mosquitto_sub 并订阅 test.mosquitto.org,它也可以工作

标签: mqtt mosquitto


【解决方案1】:

第一个问题是您是运行本地代理还是仅作为客户端连接。

如果您正在运行代理,请尝试首先使用 -c "p​​ath to config file" 运行 mosquitto,以查看您的配置文件中是否有错误。在终端中运行(linux 上的示例):

mosquitto -c /etc/mosquitto/mosquitto.conf

如果出现错误,控制台将显示它,您可以从那里获取。

接下来,尝试像这样格式化您的主题(称为主题重新映射): 主题测试出 0 local/local/

现在您可以从您的代码或终端发布到本地/测试,消息将发布到远程代理上的本地/测试,该代理将通过订阅同一主题来接收消息。

【讨论】:

    【解决方案2】:

    2019 年 9 月更新

    据报道,下面描述的 Windows 上的错误已在 Mosquitto 1.6.5 版中得到修复。


    在 Windows 上运行的 Mosquitto 似乎存在一个错误,导致桥接无法工作。

    在 Windows 上,在 Mosquitto 尝试连接之前,套接字还没有准备好。

    https://github.com/eclipse/mosquitto/issues/478https://github.com/eclipse/mosquitto/issues/580。这描述了 Windows 上的根本问题:

    检查代码后,我发现bridge.c ....中的语句使非阻塞套接字连接。

    ...

    所以下一个命令...有时会失败,因为连接尚未建立,因为上一个连接是非阻塞的。

    【讨论】: