# 自动订阅

当设备连接到 EMQX 成功之后,不需要发送额外的订阅请求( SUBSCRIBE 报文),EMQX 为设备完成预设的订阅关系。 此功能由 EMQX 4 版本中 MQTT 代理订阅 功能改进而来。

# 配置项

# 配置项定义

字段含义取值范围默认值
auto_subscribe自动订阅配置项集合topicstopics
topics订阅选项订阅选项列表,参考下表 订阅选项[]

# 订阅选项

字段含义取值范围默认值
topic必填,主题,订阅标识符字符串,支持占位符
qos非必填,服务质量( QoS )0,1,2 服务端可以向客户端发送的应用消息的最大 QoS 等级0
rh非必填,仅在设备使用 MQTT 5.0 版本协议时生效;当订阅建立时,是否发送保留消息0:订阅建立时发送保留消息;
1:订阅建立时,若该订阅当前不存在则发送保留消息;
2:订阅建立时不要发送保留消息
0
rap非必填,仅在设备使用 MQTT 5.0 版本协议时生效;向此订阅转发应用消息时,是否保持消息被发布时设置的保留(RETAIN)标志0:表示向订阅转发应用消息时把保留标志设置为 0;
1:表示向此订阅转发应用消息时保持消息被发布时设置的保留标志
0
nl非必填,仅在设备使用 MQTT 5.0 版本协议时生效;应用消息是否能够被转发到发布此消息的客户端0:表示应用消息可以被转发给发布此消息的客户端;
1:表示应用消息不能被转发给发布此消息的客户端
0

# 订阅主题占位符

占位符含义
${clientid}设备 ID
${username}设备连接使用的用户名
${ip}设备 TCP 连接本地 IP 地址
${port}设备 TCP 连接本地端口号(Port)

# 快速上手

将下面的配置项添加到配置文件中

auto_subscribe {
    topics = [
        {
            topic = "c/${clientid}"
        },
        {
            topic = "client/${clientid}/username/${username}/host/${host}/port/${port}"
            qos   = 1
            rh    = 0
            rap   = 0
            nl    = 0
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+---------------------------+             +----------------+
| clientid: demo_client1    |             |  EMQX Broker   |
| username: admin           |             |                |
| local host: 192.168.1.234 |<----------->|                |
| local port: 55678         |             |                |
+---------------------------+             +----------------+
1
2
3
4
5
6

设备使用 MQTT 5.0 以下版本时,登录成功后可以获得以下订阅:

topic: c/demo_client1
qos: 0
1
2
topic: client/demo_client1/username/admin/host/192.168.1.234/port/55678
qos: 1
1
2

设备使用 MQTT 5.0 版本时,登录成功后可以获得以下订阅:

topic: c/demo_client1
qos: 0
rh: 0
rap: 0
nl: 0
1
2
3
4
5
topic: client/demo_client1/username/admin/host/192.168.1.234/port/55678
qos: 1
rh: 0
rap: 0
nl: 0
1
2
3
4
5