请求所有已发布的主题

Request all published topics

我正在为我的 MQTT Broker 使用 Mosquitto

我想知道是否可以请求所有已发布的主题?

因此不是通过订阅所有内容,即 #

编辑:我不想订阅所有可用的主题。我只是在寻找一种方法来检索所有已发布的主题。例如,代理可以使用包含所有已发布主题的字符串数组进行响应。

简短的回答是否定的,代理不需要保留已发布消息的主题列表,它只是在消息到达时检查每个客户端订阅的主题列表。

此外,如果确实保留了这样一个列表,您将如何决定何时从列表中删除某个主题,一条消息只能发送一次到该特定主题,您会将该主题永远保留在列表中吗?

MQTT 代理的可管理性在这一点上还很不成熟。 我也不知道有什么方法可以从任何经纪人处检索已发布主题的列表。 但是,有标准化工作,例如。与 $SYS 主题树 https://github.com/mqtt/mqtt.github.io/wiki/SYS-Topics.

其他代理可以通过 SNMP 管理,例如。 MessageSight https://www.ibm.com/support/knowledgecenter/en/SSCGGQ_1.2.0/com.ibm.ism.doc/Monitoring/admin00008_.html。它可以在其 WEB 界面中列出主题,但我不知道以编程方式检索它们。

如果您向经纪人发送 "EVERY" 消息且保留消息 = True,那么您可以:

  1. 使用订阅“#”连接到服务器
  2. 检查所有保留消息及其主题(保存这些已发布的主题)
  3. 退订“#”
  4. 订阅你得到的每一个话题

解决方法,不完美,但在某些情况下仍然很好:

在调试模式下使用 mosquitto_sub 客户端可执行文件,订阅所有主题。收集 1 小时或任何您认为足够好的信息,并解析输出以提取主题。

例如:这些人 http://www.mqtt-dashboard.com/ 有一个活跃的 public mqtt 服务器,但是没有关于其他人发送数据的主题的指示(我只想测试协议的订阅部分, 没有数据发布)。作为起点,我在网上发现他们的主题以 "test/".

开头。

运行这个:

./mosquitto_sub -h broker.hivemq.com -t test/# -d

让我看到了很多现场话题,尽管可能不是全部(即使让它开放一整天)。