蚂蚁斗牛: 仅在本地模式下启动

20

我有一台虚拟机,应该是主机,可以接收和发送数据。第一张图片显示了我在主机上(从中我试图发送数据)得到的错误。第二张图片是我的虚拟机上的mosquitto日志。此外,我正在使用默认配置,据我所知,这不会引起问题,至少从其他示例中我看到的情况来看是这样的。我对所有这些工作原理有非常少的了解,因此任何帮助都将不胜感激。

我在主机上尝试了以下方法:

  1. 禁用Windows Defender
  2. 为“mosquitto.exe”添加防火墙规则
  3. 在Linux机器上安装mosquitto

第一个错误

第二个错误

Netstat信息


1
请勿发布文本图像!!只需在此处发布错误文本即可。其次,这是一个关于编码问题的网站,但我完全没有看到任何代码......请更改,否则会有人关闭您的帖子。 - JD Allen
7个回答

32

从Mosquitto 2.0.0版本开始(您正在运行v2.0.2),默认配置将只绑定到localhost,以更安全的方式进行默认姿态移动。

如果您想要从其他计算机访问代理,则需要显式编辑配置文件,以添加绑定到外部IP地址(或0.0.0.0)的新listener或为默认监听器添加bind条目。

默认情况下,它还仅允许来自localhost的匿名连接(无需用户名/密码)。 若要允许来自远程的匿名连接,请添加:

allow_anonymous true
listener 1883

更多细节可以在2.0版本发布说明这里找到。


你好!感谢您的快速回复并修复我的帖子。我无法为您的帖子点赞,但如果可以的话,我会这样做。 ;) 我决定不去修改配置文件,而是下载一个旧版本的mosquitto。如果我有更多时间,我会深入研究配置文件,并通过那种方式来解决问题。 - FlasH
2
只需要在配置文件中添加 bind_interface devicebind_address ip_address 即可。 - hardillb
1
@hardillb - 最近的更新彻底毁了我的一天 - 我是通过Homebrew在Mac OS X上安装的,你知道哪个配置文件吗? - Adam Jenkins
这是一个重大的版本号更改,因此预计会破坏某些东西。我没有 Mac,所以只能猜测它可能在 /usr/local/etc 下(正如您发布到问题中的日志输出中所描述的)。 - hardillb
监听器1883也必须被添加。 - Randy Welt
@RandyWelt,这正是第二段所明确的。 - hardillb

19

你必须跟着跑

mosquitto -c mosquitto.conf

必须在与执行文件相同的文件夹(例如:C:\Program Files\mosquitto)中存在 mosquitto.conf 文件,并且该文件必须包含以下行。

listener 1883 ip_address_of_the_machine(192.168.1.1 etc.)

2
谢谢!到处都在谈论在mosquitto.conf中定义监听器,但这是我第一次遇到需要指定文件作为参数的情况。 - vincebel

18

默认情况下,Mosquitto代理仅接受来自本地机器(托管代理的服务器)的客户端连接。 因此,需要使用自定义配置来接受来自远程客户端的连接。

  1. 在Windows计算机上以管理员身份运行文本编辑器,并粘贴以下文本:
listener 1883
allow_anonymous true
  1. 这将在端口1883上创建一个监听器并允许匿名连接。默认情况下,连接数是无限的。将文件保存到"C:\Program Files\Mosquitto",使用带有".conf"扩展名的文件名,例如"your_conf_file.conf"。

  2. 打开终端窗口并导航到mosquitto目录。运行以下命令:

mosquitto -v -c your_conf_file.conf

where

-c:指定经纪人配置文件。

-v:详细模式 - 启用所有日志记录类型。 这将覆盖在配置文件中给出的任何日志选项。


由于某种原因,当我像这样运行时,会出现错误,指出mosquitto -c /etc/mosquitto/conf.d/mosquitto.conf 给出了 配置中的重复pid_file值,它不喜欢第6和13行。这两行包含在默认的conf文件中。只有pid_file和include_dir。不知道我还做错了什么。 - Gallaugher

4
我发现我不仅需要添加bind_address ip_address,还需要将allow_anonymous true设置为真,才能使设备成功连接到MQTT。当然,更好的选择是在每个设备上设置用户和密码,但在最小配置中,一切正常工作之后才会进行下一步操作。

2

对于在Mac上使用homebrew的mosquitto的用户。


将这两行添加到/opt/homebrew/Cellar/mosquitto/2.0.15/etc/mosquitto/mosquitto.conf文件中,可以解决我的问题。

allow_anonymous true 
listener 1883

1
你可以使用附带的“no-auth”配置文件来运行它,像这样:
mosquitto -c /mosquitto-no-auth.conf 

我在运行生成于docker-compose的容器时遇到了同样的问题。 在docker-compose.yml文件中,可以通过以下方式解决:

command: mosquitto -c /mosquitto-no-auth.conf 

0
当我在我的本地Ubuntu机器上使用本地mosquitto代理运行mqtt通信时,我遇到了类似的问题。 通过编辑位于etc/mosquitto的mosquitto代理配置文件,我成功解决了通信问题。 然后,我使用nano编辑器打开文件,并通过命令进行编辑。
sudo nano mosquitto.conf 

在配置文件中添加了以下两行
allow_anonymous true 
listener 1883

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接