代理订阅

EMQ X 的代理订阅功能使得客户端在连接建立时,不需要发送额外的 SUBSCRIBE 报文,便能自动建立用户预设的订阅关系。

你可以使用管理监控 API 对处于连接状态的设备进行订阅、取消订阅操作,参见 主题订阅 取消订阅

内置代理订阅

通过内置代理订阅模块可以通过配置文件指定代理订阅规则实现代理订阅,适用于有规律可循的静态的代理订阅需求。

开启代理订阅功能

代理订阅功能默认关闭,开启此功能需要修改 etc/emqx.conf 文件中的 module.subscription 配置项。默认 off 表示关闭,如需开启请修改为 on

  1. module.subscription = off

配置代理订阅规则

当然,仅仅开启并不意味代理订阅已经工作,你还需要配置相应的规则,EMQ X 的代理订阅规则支持用户自行配置,用户可以自行添加多条代理订阅规则,每条代理订阅规则都需要指定 Topic 和 QoS,规则的数量没有限制,代理订阅规则的格式如下:

  1. module.subscription.<number>.topic = <topic>
  2. module.subscription.<number>.qos = <qos>

在配置代理订阅的主题时,EMQ X 提供了 %c%u 两个占位符供用户使用,EMQ X 会在执行代理订阅时将配置中的 %c%u 分别替换为客户端的 Client IDUsername,需要注意的是,%c%u 必须占用一整个主题层级。

例如,在 etc/emqx.conf 文件中添加以下代理订阅规则:

  1. module.subscription.1.topic = client/%c
  2. module.subscription.1.qos = 1
  3. module.subscription.2.topic = user/%u
  4. module.subscription.2.qos = 2

当一个客户端连接 EMQ X 的时候,假设客户端的 Client IDtestclientUsernametester,根据上文的配置规则,代理订阅功能会主动帮客户端订阅 QoS 为 1 的 client/testclient 和 QoS 为 2 的 user/tester 这两个主题。

动态代理订阅

EMQ X Enterprise 版本中支持动态代理订阅,通过外部数据库设置主题列表在设备连接时读取列表实现代理订阅。