个人用大白话来理解
代理订阅就是 EMQ设置一些规则,消费者不需要订阅某主题,就可以接收到某些主题的消息
所谓静态代理订阅,就是主题必须要有一定的规律,简单的,如识别用户,clientId的可以,复杂的就不行了,需要用到动态代理订阅
代理订阅
EMQ X 的代理订阅功能使得客户端在连接建立时,不需要发送额外的 SUBSCRIBE 报文,便能自动建立用户预设的订阅关系。
#开启代理订阅功能
代理订阅功能由 emqx_mod_subscription
内置模块提供,此功能默认关闭,支持在 EMQ X Broker 运行期间动态启停,请参见 内置模块。
#配置代理订阅规则
代理订阅功能开启之后还需要配置相应的规则,EMQ X 的代理订阅规则支持用户自行配置,用户可以自行添加多条代理订阅规则,代理订阅规则支持用户配置 Topic 和订阅选项(QoS、No Local、Retain As Published、Retain Handling),其中 Topic 为必填项,订阅选项如果不配置的话 EMQ X 会应用默认的配置。
代理订阅规则的格式如下:
## 代理订阅的主题
module.subscription.<number>.topic = <topic>
## 代理订阅的订阅选项:QoS
## 可选值: 0、1、2
## 默认值:1
module.subscription.<number>.qos = <qos>
## 代理订阅的订阅选项:No Local
## 可选值: 0、1
## 默认值:0
module.subscription.<number>.nl = <nl>
## 代理订阅的订阅选项:Retain As Published
## 可选值: 0、1
## 默认值:0
module.subscription.<number>.rap = <rap>
## 代理订阅的订阅选项:Retain Handling
## 可选值: 0、1、2
## 默认值:0
module.subscription.<number>.rh = <rh>
需要注意的是,订阅选项中的 No Local、Retain As Published、Retain Handling 仅支持 MQTT V5 协议,当客户端以 MQTT V3 或 MQTT V3.1.1 连接时,代理订阅配置中仅有 Topic 与 QoS 的配置生效。
在配置代理订阅的主题时,EMQ X 提供了 %c
和 %u
两个占位符供用户使用,EMQ X 会在执行代理订阅时将配置中的 %c
和 %u
分别替换为客户端的 Client ID
和 Username
,需要注意的是,%c
和 %u
必须占用一整个主题层级。
案例测试
# 代理订阅规则
module.subscription.1.topic = connected/%c/%u
假如 客户端A的clientID为 clientid_1,userName为 user_1,则会自动帮客户订阅 connected/clientid_1/user_1的主题,如下图所示