在MQTT主题的级别中使用通配符

时间:2019-05-02 20:26:08

标签: mqtt

我想订阅多个MQTT主题,但其中一个主题的级别略有不同。例如:

  • sports/tennis/courtA
  • sports/tennis/courtB
  • sports/tennis/courtC

是否可以使用单个字符通配符?

在我完成的所有搜索中,除#+之外,我什么都没有看到。我的理解是,不可能将该信函发布为新的子级别(即sports/tennis/court/A)。

我想拥有sports/tennis/court*之类的东西,所以我看到了法院的话题,但在同一级别上没有别的东西了。

1 个答案:

答案 0 :(得分:2)

否,您只能在子主题级别使用通配符。唯一受支持的通配符是#+

#匹配1个或多个子主题,但不能在主题中间使用。例如sports/tennis/#有效,而sports/#/courtA无效。

+与单个子主题匹配,可以放置在主题中的任何位置。例如+/tennis/courtAsports/+/courtA均有效。

您可以做的是订阅一个通配符主题,该主题的作用域比您想要的范围稍宽,然后在消息处理程序中再次进行过滤,因为所有消息处理程序回调都应使您可以访问传入的消息主题。

例如订阅sports/tennis/+,然后在邮件传递时过滤掉它匹配的其他任何内容。

编辑:对不起,我在问题中间有点遗漏。

sports/tennis/courts/Asports/tennis/courts/B是一个非常有效的主题,并且可以与sports/tennis/courts/#sports/tennis/courts/+匹配(前提是第一个也将与{{1 }}在第二个不会的地方