问题
I'm using Mosquitto for my MQTT Broker.
I was wondering if it would be possible to request all published topics?
Thus NOT by subscribing to everything, i.e. #
.
EDIT: I don't want to subscribe to every available topic. I'm just looking for a way to retrieve all published topics. The broker could for instance response with a string array containing all the published topics.
回答1:
Manageability of MQTT brokers is very immature at this point. I also don't know of a way to retrieve the list of published topics from any broker. But, there are standardization efforts, eg. with the $SYS topic tree https://github.com/mqtt/mqtt.github.io/wiki/SYS-Topics.
Other brokers are manageable via SNMP, eg. MessageSight https://www.ibm.com/support/knowledgecenter/en/SSCGGQ_1.2.0/com.ibm.ism.doc/Monitoring/admin00008_.html . It can list the topics in its WEB interface, but I don't know of a programmatic way to retrieve them.
回答2:
If you send "EVERY" message to broker with retain message = True, then you can:
- Connects to server with subscribe '#'
- Check all the retain message and their topic (save these published topics)
- Unsubscribe '#'
- Subscribe every topics you got
回答3:
The short answer is no, a broker doesn't need keep a list of what topic messages have been published to, it just checks the list of topics each client is subscribed to when a message arrives.
Also if it did keep such a list, how would you decide when to remove a topic from the list, a message may only ever be sent once to that particular topic, would you keep that topic on the list forever?
回答4:
A workaround, not perfect, but still good in some cases:
Use the mosquitto_sub client executable in debug mode, subscribed to all topics. Collect info for 1 hour or whatever you think is good enough, and parse the output to extract the topics.
Eg: these guys http://www.mqtt-dashboard.com/ have a lively public mqtt server but there is no indication about the topics other people send data too (and I wanted to test only the subscribe part of the protocol, no data to publish). As a starting point, I found on reference on the net that their topics start with "test/".
Running this:
./mosquitto_sub -h broker.hivemq.com -t test/# -d
allowed me to see lots of live topics, albeit probably not all of them (even if let it open for one full day).
来源:https://stackoverflow.com/questions/42559890/request-all-published-topics