【问题标题】:How do I subscribe to all topics of a MQTT broker如何订阅 MQTT 代理的所有主题
【发布时间】:2015-10-02 09:12:49
【问题描述】:

我想连接一个客户端,该客户端将监控代理的所有主题,以便在我不知道主题名称时响应事件。

【问题讨论】:

    标签: mqtt mosquitto


    【解决方案1】:

    订阅# 可让您订阅除以$ 开头的主题以外的所有内容(无论如何,这些主题通常都是控制主题)。

    当然,最好先知道您要订阅什么,并注意某些代理配置可能明确禁止订阅#

    【讨论】:

    • 但是下面的链接说我们不应该订阅#hivemq.com/blog/…。因为它增加了代理的大量开销。如果主题数量过多。
    • @ralight 有什么方法可以限制rabbitmq 中的这种行为吗?
    • 不要忘记开头的“/”,所以应该是“-t /#”
    • @ChristianBaumann 这不正确。 # 为您提供一切。没有要求以/ 开头,我会积极鼓励您不要这样做 - 它增加了额外的不必要的层次结构级别。如果将主题字符串 /one/two//three 拆分为其元素,则会得到 ``、onetwo、``、three。例如,订阅/# 将不会收到发布到one 的消息。
    • 那是因为 # 被你的 shell 作为注释吞下了。试试mosquitto_sub -t '#'mosquitto_sub -t \#
    【解决方案2】:

    您可以使用mosquitto_sub(它是mosquitto-clients 包的一部分)并订阅通配符主题#

    mosquitto_sub -v -h broker_ip -p 1883 -t '#'
    

    【讨论】:

    • 谢谢你!从来没有人展示过这个简单但基本的命令!
    【解决方案3】:

    具体例子

    mosquitto.org 非常活跃(在发帖时)。这是 MQTT 订阅者 linux 设备的一个不错的冒烟测试:

    mosquitto_sub -h test.mosquitto.org -t "#" -v
    

    “#”是主题的通配符,返回所有消息(主题):服务器流量很大,所以它返回了一个“firehose”消息。

    如果您的 MQTT 设备将主题为 irisys/V4D-19230005/ 发布到测试 MQTT 代理,那么您可以过滤消息:

    mosquitto_sub -h test.mosquitto.org -t "irisys/V4D-19230005/#" -v
    

    选项:

    • -h 主机名(默认 MQTT 端口 = 1883)
    • -t 在主题之前

    【讨论】:

    • 你为什么只是重复一个现有的答案(通过 rem)?
    • @hardillb 很好的问题! Rem 有一个很好的答案,但是,我的示例是“具体的”,因为它指向一个高流量的 MQTT 代理,因此读者可以快速/轻松地从命令行进行测试。 mqtt.eclipse.org 没有正常流量并且存在问题。我试图为社区提供一个简单的工作“具体”示例,并避免我遇到的陷阱/障碍。我觉得我的答案是 rem 的好答案的下一个演变(我赞成 rem 的答案)
    【解决方案4】:

    使用通配符“#”,但请注意,有时您必须以某种方式理解通过总线的数据!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      • 2022-01-18
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多