我想订阅多个MQTT主题,但其中一个主题的级别略有不同。例如:
sports/tennis/courtA
sports/tennis/courtB
sports/tennis/courtC
是否可以使用单个字符通配符?
在我完成的所有搜索中,除#
和+
之外,我什么都没有看到。我的理解是,不可能将该信函发布为新的子级别(即sports/tennis/court/A
)。
我想拥有sports/tennis/court*
之类的东西,所以我看到了法院的话题,但在同一级别上没有别的东西了。
答案 0 :(得分:2)
否,您只能在子主题级别使用通配符。唯一受支持的通配符是#
和+
#
匹配1个或多个子主题,但不能在主题中间使用。例如sports/tennis/#
有效,而sports/#/courtA
无效。
+
与单个子主题匹配,可以放置在主题中的任何位置。例如+/tennis/courtA
和sports/+/courtA
均有效。
您可以做的是订阅一个通配符主题,该主题的作用域比您想要的范围稍宽,然后在消息处理程序中再次进行过滤,因为所有消息处理程序回调都应使您可以访问传入的消息主题。
例如订阅sports/tennis/+
,然后在邮件传递时过滤掉它匹配的其他任何内容。
编辑:对不起,我在问题中间有点遗漏。
sports/tennis/courts/A
和sports/tennis/courts/B
是一个非常有效的主题,并且可以与sports/tennis/courts/#
或sports/tennis/courts/+
匹配(前提是第一个也将与{{1 }}在第二个不会的地方