两个通配符
单层通配符匹配一层中的任意内容,多层通配符匹配零层或多层,因此它只能出现在主题过滤器的最后并独占一层。以美元符号开头的主题通常是代理自身发布的系统主题,不会被多层通配符或顶层的单层通配符匹配,需要显式订阅。
匹配示例
| 订阅过滤器 | 能匹配 | 不能匹配 |
|---|---|---|
| a/+/c | a/b/c、a/x/c | a/b/x/c、a/c |
| a/# | a、a/b、a/b/c | b/a、x/a/b |
| # | 所有不以美元符号开头的主题 | 代理自身的系统主题 |
| $SYS/# | 代理系统主题 | 普通业务主题 |
常见写法
常见写法
# 订阅某站点全部数据:acme/shanghai/+/#
# 订阅全部租户的设备状态:+/+/+/status
# 订阅代理自身运行指标:$SYS/broker/#
# 非法写法:a/#/c(多层通配符不在末尾)
# 非法写法:a/b#(多层通配符未独占一层)典型使用场景
- 平台侧汇聚:按站点或设备类型用通配符订阅,新增设备无需改配置
- 运维监控:订阅代理系统主题观察连接数、消息吞吐与丢弃计数
- 临时排查:用单层通配符临时替换某个设备编号,快速比对同类设备数据
- 规则引擎:以通配符订阅作为规则输入,把消息路由到不同处理管道
过滤器匹配发生在服务端,客户端不会收到被过滤掉的报文,因此通配符订阅本身不增加下行流量,但会显著增加服务端匹配与转发的负担。
服务端通常直接以主题过滤器作为授权依据,过宽的通配符等于把授权范围一并放大,需要与最小权限原则一起权衡。