首页 > 解决方案 > 在 MQTT 主题的关卡中使用通配符

问题描述

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

有没有办法使用单字符通配符?

在我所做的所有搜索中,我没有看到任何超出#和的内容+。我的理解是,不可能将这封信作为新的子级别(即sports/tennis/court/A)发布。

我想要类似的东西sports/tennis/court*,所以我看到了法庭主题,但在同一级别没有其他内容。

标签: mqtt

解决方案


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

#匹配 1 个或多个子主题,但不能在主题中间使用。egsports/tennis/#是有效的,但sports/#/courtA不是。

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

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

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

编辑:对不起,我在问题中间错过了一点。

sports/tennis/courts/A是一个完全有效的主题,sports/tennis/courts/B并且会被匹配sports/tennis/courts/#或匹配sports/tennis/courts/+(理解第一个也匹配sports/tennis/courts/A/foo第二个不匹配的地方)


推荐阅读