请求发布所有主题

时间:2017-03-02 15:48:48

标签: mqtt mosquitto

我正在使用mosquitto作为我的MQTT Broker。 我想知道是否可以请求所有已发布的主题?

因此,不要订阅所有内容,即“#”。

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

4 个答案:

答案 0 :(得分:4)

此时,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界面中列出主题,但我不知道以编程方式检索它们。

答案 1 :(得分:3)

如果您发送"每个"使用retain message = True向代理发送消息,然后您可以:

  1. 使用订阅'#'
  2. 连接到服务器
  3. 检查所有保留消息及其主题(保存这些已发布的主题)
  4. 取消订阅'#'
  5. 订阅您获得的每个主题

答案 2 :(得分:0)

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

此外,如果它确实保留了这样的列表,您将如何决定何时从列表中删除主题,消息可能只会被发送一次到该特定主题,您是否会永久地将该主题保留在列表中?

答案 3 :(得分:0)

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

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

例如:这些人http://www.mqtt-dashboard.com/拥有活跃的公共mqtt服务器,但是也没有迹象表明其他人也发送数据(我只想测试协议的订阅部分,没有要发布的数据) 。首先,我在网上参考中发现他们的主题以“ test /”开头。

运行此:

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

允许我看到很多实时主题,尽管可能不是全部(即使开放一整天也是如此)。