我想连接一个客户端,监视代理的所有主题,并在我不知道主题名称时响应事件。
订阅 #
可以让你订阅除以 $
开头的主题以外的所有主题(这些通常是控制主题)。
当然,最好先了解你要订阅的内容,并注意某些代理配置可能不允许显式订阅 #
。
您可以使用mosquitto_sub
(它是mosquitto-clients
软件包的一部分)并订阅通配符主题#
:
mosquitto_sub -v -h broker_ip -p 1883 -t '#'
mosquitto.org非常活跃(在发布此文时)。这是对MQTT订阅者Linux设备进行良好的烟雾测试:
mosquitto_sub -h test.mosquitto.org -t "#" -v
"#"
是通配符,代表所有主题,并返回所有消息(主题):服务器流量很大,所以返回了大量的消息。
如果你的 MQTT 设备将主题发布为 irisys/V4D-19230005/
到测试 MQTT 代理程序,那么你可以对消息进行过滤:
mosquitto_sub -h test.mosquitto.org -t "irisys/V4D-19230005/#" -v
发布一条测试消息到服务器:
mosquitto_pub -h test.mosquitto.org -m "$NOW,QFNONS,B6,0677,JFKCDG" -t "irisys/V4D-19230005/"
sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt install mosquitto mosquitto-clients
并配置 /etc/mosquitto/mosquitto.conf 以启用匿名发布/订阅
# enable anonymous traffic through port 1833 https://stackoverflow.com/a/41852506/4953146
listener 1883 #https://mosquitto.org/documentation/authentication-methods/
allow_anonymous true
为了测试/概念验证,无需进行身份验证。在您的局域网上验证后,您可以转发1883的广域网流量以进行进一步的测试。
使用通配符“#”,但要注意,您最终需要以某种方式理解通过总线传递的数据!
#
可以获取所有内容,没有必要以/
开头,我甚至会建议你不要这样做——这会增加一个不必要的层级。如果你将主题字符串/one/two//three
分成元素,你会得到''
,one
,two
,''
,three
。因此,订阅/#
将不会接收到发布到one
的消息,例如。 - ralightmosquitto_sub -d -u username -P password -t #
时,我得到了Error: -t argument given but no topic specified.
的错误提示。 - Christian Baumannmosquitto_sub -t '#'
或者mosquitto_sub -t \#
。 - ralight