Request all published topics

你离开我真会死。 提交于 2020-01-03 16:35:34

问题


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:

  1. Connects to server with subscribe '#'
  2. Check all the retain message and their topic (save these published topics)
  3. Unsubscribe '#'
  4. 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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!