如何检查 MQTT 中是否存在主题?

How to check if topic exists in MQTT?

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

代理中没有浏览主题...

您最多只能订阅 $sys,但这将取决于某些经纪商的配置是否允许您订阅

有关 $Sys 信息的文档是:

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

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

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

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

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

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

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

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

  • $SYS/broker/messages/publish/dropped: 由于 inflight/queuing 限制而丢弃的发布消息总数。

  • $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: 经纪人的版本。静态。

简短的回答是你不知道。

直到消息发布到某个人的那一刻,主题才真正存在。

订阅者告诉代理它对哪些主题感兴趣,如果发布者向这些主题之一发布消息,则消息将转发给该订阅者(允许 acls)。

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

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

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

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