【问题标题】:How to check if topic exists in MQTT?如何检查 MQTT 中是否存在主题?
【发布时间】:2017-04-05 16:19:58
【问题描述】:

我正在使用 mosquitto MQ 和 eclipse paho java 库。我想在订阅主题并获取消息之前检查主题是否存在。我该怎么做?

【问题讨论】:

    标签: java rabbitmq mqtt paho


    【解决方案1】:

    简短的回答是你没有。

    在消息发布到某个主题之前,主题并不是真正存在的。

    订阅者告诉代理它感兴趣的主题,如果发布者向其中一个主题发布消息,那么消息将被转发给该订阅者(acls 允许)。

    可以订阅包含通配符的主题,如果您想匹配的不仅仅是单个主题,这会有所帮助。有 2 个通配符。

    • + 匹配主题中的单个元素。例如foo/+/bar 将匹配 foo/1/bar 和 foo/something/bar

    • # 匹配多个句段,但仅在主题末尾。例如/foo/# 将匹配 /foo/1 和 foo/bar/1/something。你不能把它放在任何地方,只能放在最后,所以 foo/#/bar 不起作用

    @ΦXocę 웃 Пepeúpa ツ 提到的$SYS 主题仅提供有关经纪人的统计信息,而不是存在哪些主题。

    【讨论】:

    • 基本上我想订阅一个主题,只有当有人发布到该主题时。有没有办法检查?
    • 不行,唯一的办法就是订阅看看
    • 哦,谢谢哈迪尔布。那么如何在不断开连接的情况下执行回调后在restful服务中获取消息。
    【解决方案2】:

    在代理中没有什么比浏览主题...

    您可以获得的最多是订阅 $sys,但这将取决于某些经纪人配置是否允许您这样做

    关于 $Sys 信息的文档是:

    • $SYS/broker/load/bytes/received: 自代理启动以来收到的总字节数。

    • $SYS/broker/load/bytes/sent: 自代理启动以来发送的总字节数。

    • $SYS/broker/clients/connected: 当前连接的客户端数

    • $SYS/broker/clients/断开连接: 在代理注册但当前已断开连接的持久客户端(已禁用干净会话)的总数。

    • $SYS/broker/clients/maximum: 已连接到代理的最大活动客户端数。这仅在 $SYS 主题树更新时计算,因此可能不会计算短暂的客户端连接。

    • $SYS/broker/clients/total: 当前在代理上连接和注册的具有持久会话的已连接和已断开连接的客户端总数。

    • $SYS/broker/messages/received: 自代理启动以来收到的任何类型的消息总数。

    • $SYS/broker/messages/sent: 自代理启动以来发送的任何类型的消息总数。

    • $SYS/broker/messages/publish/dropped: 由于飞行/排队限制而被丢弃的发布消息总数。

    • $SYS/broker/messages/publish/received: 自代理启动后收到的 PUBLISH 消息总数。

    • $SYS/broker/messages/publish/sent: 自代理启动以来发送的 PUBLISH 消息总数。

    • $SYS/broker/messages/retained/count: 代理上活动的保留消息总数。

    • $SYS/broker/subscriptions/count: 代理上的活跃订阅总数。

    • $SYS/broker/time: 服务器上的当前时间。

    • $SYS/broker/uptime: 代理在线的时间量(以秒为单位)。

    • $SyS/broker/version: 代理的版本。静态的。

    【讨论】:

      猜你喜欢
      • 2015-09-05
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多