2017-03-02 70 views
1

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

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

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

+0

究竟是什么你想在这里实现什么?订阅一个庞大的主题列表会导致代理商产生更多的开销(因为它必须检查列表中的所有内容),而不是仅仅检查匹配所有内容的“#”。 – hardillb

+0

我不是说我想订阅一切。我只是想要请求所有已发布的主题。例如,代理可以使用包含所有已发布主题的字符串数组进行响应。我编辑了我的问题以更好地反映我的意图。 – gillesC

回答

2

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

0

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

此外,如果它没有保持这样一份名单,你会如何决定何时从列表中删除一个主题,一个消息可能永远只能发送一次到特定的主题,你会保留名单上的话题永远不会消失?

+0

活动主题的存储可以通过最大存储时间等进行配置。 – gillesC

1

如果发送“EVERY”消息,经纪商保留消息= true,则您可以:

  1. 连接到服务器订阅“#”
  2. 检查所有保留的消息和他们的话题(除这些发表主题)
  3. 退订“#”
  4. 订阅每个话题你有