【问题标题】:Request all published topics请求所有已发布的主题
【发布时间】:2017-03-02 15:48:48
【问题描述】:

我正在为我的 MQTT 代理使用 Mosquitto

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

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

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

【问题讨论】:

  • 你到底想在这里实现什么?订阅大量主题列表将导致代理的开销更大(因为它必须检查列表中的所有内容)而不是仅检查与所有内容匹配的“#”。
  • 我并不是说我想订阅所有内容。我只是想请求所有已发布的主题。例如,代理可以只使用包含所有已发布主题的字符串数组进行响应。我已经编辑了我的问题以更好地反映我的意图。

标签: mqtt mosquitto


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果您向代理发送“EVERY”消息且保留消息 = True,那么您可以:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 活动主题的存储可以通过最大存储时长等来配置。
      【解决方案4】:

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

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

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

      运行这个:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-31
        • 2021-08-06
        • 2017-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多