Luc*_*nzo 5 linux bash shell mqtt mosquitto
我想使用mosquitto库使用MQTT协议.
首先,我想做一些安装mosquitto-clients的测试
sudo apt-get install mosquitto-clients
Run Code Online (Sandbox Code Playgroud)
该程序提供了两种"方法":
按照此说明,我正在尝试提交新主题:
mosquitto_sub -d -t newtopic/test
Run Code Online (Sandbox Code Playgroud)
使用默认主机/端口[localhost/1883].
我获得:
Error: Connection refused
Run Code Online (Sandbox Code Playgroud)
过于通用,因为错误..任何人都可以帮助我吗?
可能是防火墙问题?在这种情况下,我该如何检查这是否是问题?
我正在使用linux ubuntu(3.8.0-42-generic#62~minision1-Ubuntu)
NB相同的行为写的用libmosquitto自定义程序.
T77*_*T77 28
只需编辑 Mosquitto 配置文件 ( /etc/mosquitto/conf.d/mosquitto.conf) 添加这些行...
allow_anonymous true
listener 1883 0.0.0.0
...然后重新启动 Mosquitto(无论是否作为服务)。
$ sudo service mosquitto restart
或者
$ mosquitto --verbose --config-file /etc/mosquitto/conf.d/mosquitto.conf
如此处所述,自 v1.7 (2022) 起allow_anonymous默认为false. 检查日志消息 ( /var/log/mosquitto/mosquitto.log) 也很有用。
--host最后,使用( ) 参数和主机 IP 地址(从或命令-h获取)运行 Mosquitto 订阅者/发布者。ifconfigip -color addr
use*_*368 13
其他答案都不适合我。就我而言,我已从 mosquitto 1.X 升级到 mosquitto 2.0,这需要将新配置添加到您的mosquitto.conf:
listener 1883
Run Code Online (Sandbox Code Playgroud)
对于本地主机以外的客户端进行连接(即通过 Docker)
mosquitto_pub/sub的默认主机:端口组合是localhost:1883.如果您没有在本地计算机上运行代理,那么当然它将无法连接.
解决方案是在本地计算机上运行代理,或者告诉实用程序在哪里连接.例如:
mosquitto_sub -t newtopic/test -h test.mosquitto.org
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,对我来说是升级mosquittomqtt v5 支持:
$ mosquitto --version
mosquitto version 2.0.14
mosquitto is an MQTT v5.0/v3.1.1/v3.1 broker.
Run Code Online (Sandbox Code Playgroud)
但是,升级后的代理不再支持匿名连接:
$ mosquitto_pub -t mytopic -m "Hello World"
Connection error: Connection Refused: not authorised.
Error: The connection was refused.
Run Code Online (Sandbox Code Playgroud)
这可能是一个更好的默认值,但在实验时不太友好。要将代理配置为允许匿名连接:
$ cat /etc/mosquitto/conf.d/standard.conf
listener 1883
protocol mqtt
allow_anonymous true
$ sudo systemctl restart mosquitto.service
Run Code Online (Sandbox Code Playgroud)
然后,嘿,快点:
$ mosquitto_pub -t mytopic -m "Hello World"
Run Code Online (Sandbox Code Playgroud)
对于未来的谷歌员工:
如上所述,您可以使用公共主机,但要启动本地mosquitto 代理,首先要确保mosquitto除了mosquitto_sub. 然后,您只需运行以下命令即可启动 mosquitto 代理:
mosquitto
Run Code Online (Sandbox Code Playgroud)