定阅与发布必需要有主题,只有当定阅了某个主题后,才能收到相应主题的payload,才能进行通讯。bash
主题层级分隔符使得主题名结构化。若是存在分隔符,它将主题名分割为多个主题层级。编码
斜杠(‘/’ U+002F)用于分割主题的每一个层级,为主题名提供一个分层结构。当客户端订阅指定的主题过滤器包含两种通配符时,主题层级分隔符就颇有用了。主题层级分隔符能够出如今主题过滤器或主题名字的任何位置。相邻的主题层次分隔符表示一个零长度的主题层级。atom
如主题:spa
>>1 root/light
code
>>2 root/tv/contrl/sensor
xml
>>3 root/tv/contrl/light
字符串
>>4 root/airconditioning/sensor
it
“#”是用于匹配主题中任意层级的通配符。多层通配符表示它的父级和任意数量的子层级。多层通配符必须位于它本身的层级或者跟在主题层级分隔符后面。无论哪一种状况,它都必须是主题过滤器的最后一个字符 .io
例如,若是客户端订阅主题 “china/guangzhou/#”,它会收到使用下列主题名发布的消息:class
>>1 china/guangzhou
>>2 china/guangzhou/huangpu
>>3 china/guangzhou/tianhe/zhongshanlu
>>4 china/guangzhou/tianhe/zhongshanlu/num123
定阅主题示例
>>1 school/# //也匹配单独的 “school” ,由于 # 包括它的父级。
>>2 # //是有效的,会收到全部的应用消息。
>>3 school/teacher/# //有效的。
>>4 school/teacher# //无效的。
>>5 school/teacher/#/lever //无效的,必须是主题过滤器的最后一个字符
加号是只能用于单个主题层级匹配的通配符。在主题过滤器的任意层级均可以使用单层通配符,包括第一个和最后一个层级。然而它必须占据过滤器的整个层级 。能够在主题过滤器中的多个层级中使用它,也能够和多层通配符一块儿使用。
>>1 china/+ 只能匹配 china/guangzhou
>>2 china/+/+/zhongshanlu 能匹配china/guangzhou/tianhe/zhongshanlu和china/shenzhen/nanshan/zhongshanlu
通配符“$”表示匹配一个字符,只要不是放在主题的最开头,即:
>>1 $xx
>>2 /$xx
>>3 /xx$
其它状况下都表示匹配一个字符。
若是客户端想同时接受以 “SYS/”开头主题的消息和不以SYS/”开头主题的消息和不以 开头主题的消息, 它须要同时订阅 “#” 和 ““$SYS/#”。