Mosquitto:以仅本地模式启动

Mosquitto: Starting in local only mode

我有一个虚拟机应该是主机,可以接收和发送数据。第一张图片是我在主机上遇到的错误(我试图从中发送数据)。第二张图是我虚拟机上的mosquitto日志。此外,我使用的是默认配置,据我所知,这不会导致这些问题,至少从我从其他示例中看到的情况来看是这样。我对所有这些工作原理知之甚少,因此不胜感激。

我在主机上尝试过的:

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

从 Mosquitto 版本 2.0.0 的发布开始(您是 运行 v2.0.2),默认配置将仅绑定到 localhost,作为向更安全的默认状态的转变。

如果您希望能够从其他机器访问代理,您需要明确编辑配置文件以添加绑定到外部 IP 地址(或 0.0.0.0)的新 listener或为默认侦听器添加 bind 条目。

默认情况下,它也只允许来自本地主机的匿名连接(没有 username/password),以允许来自远程的匿名连接:

allow_anonymous true 

可以在 2.0 发行说明中找到更多详细信息here

我发现我必须添加,不仅是 bind_address ip_address,而且还必须设置 allow_anonymous true,设备才能成功连接到 MQTT。当然我知道更好的选择是在每台设备上设置用户和密码。但这是在最低配置下一切正常工作之后的下一步。

你必须 运行 和

mosquitto -c mosquitto.conf

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

listener 1883 ip_address_of_the_machine(192.168.1.1 etc.)

您可以 运行 使用随附的 'no-auth' 配置文件,如下所示:

mosquitto -c /mosquitto-no-auth.conf 

我在 运行 将其放入 docker 容器(使用 docker-compose 生成)时遇到了同样的问题。 在 docker-compose.yml 文件中,这是通过以下方式完成的:

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

默认情况下,Mosquitto 代理将只接受来自本地计算机(托管代理的服务器)上的客户端的连接。 因此,您的 Mosquitto 实例需要使用自定义配置才能接受来自远程客户端的连接。

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

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

mosquitto -v -c your_conf_file.conf

哪里

-c : 指定代理配置文件。

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