MQTT topic匹配规则基础

230 阅读2分钟

MQTT topic匹配规则基础

1.主题层级分隔符“/”:

用于分割主题层级,/分割后的主题,这是消息主题层级设计中很重要的符号

e.g:aaaa/bbbb和 aaaa/bbbb/cccc 和aaaa/bbbb/cccc/dddd ,这样的消息主题格式,是一个层层递进的关系,可通过多层通配符同时匹配两者,或者单层通配符只匹配一个。 这在现实场景中,可以应用到:公司的部门层级推送、国家城市层级推送等包含层级关系的场景。

2.单层通配符“+”:

单层通配符只能匹配一层主题。e.g: aaaa/+ 可以匹配 aaaa/bbbb ,但是不能匹配aaaa/bbbb/cccc。 单独的+号可以匹配单层的所有推送

3.多层通配符“#”:

#:多层通配符,多层通配符可以匹配于多层主题。比如: aaaa/# 不但可以匹配aaaa/bbbb,还可以匹配aaaa/bbbb/cccc/dddd。 也就是说,多层通配符可以匹配符合通配符之前主题层级的所有子集主题。单独的#匹配所有的消息主题.

4.通配符 “$”:

通配符“$”表示匹配一个字符,只要不是放在主题的最开头,即:

xx/xx/xx/xx$

其它情况下都表示匹配一个字符。

如果客户端想同时接受以 “SYS/”开头主题的消息和不以 开头主题的消息, 它需要同时订阅 “#” 和 ““$SYS/#”。

5.总结:

(1)、所有的主题名和主题过滤器必须至少包含一个字符 (2)、主题名或主题过滤器以前置或后置斜杠 “/” 区分 (3)、只包含斜杠 “/” 的主题名或主题过滤器是合法的 (4)、主题名和主题过滤器是 UTF-8 编码字符串, 它们不能超过 65535 字节 (5)、主题名和主题过滤器是区分大小写的注: 单层通配符和多层通配符只能用于订阅(subscribe)消息而不能用于发布(publish)消息,层级分隔符两种情况下均可使用