当前有三个emq,分别为emq-1,emq-2,emq-3。emq-1中已经配置了向emq-2的桥接,向emq-1中发送retain消息,emq-2可以收到emq-1桥接过来的消息。这是增加emq-1到emq-3的桥接,emq-1中的消息是retain的,是不是应该自动桥接转发到emq-3中。当前使用中,在后续新增加桥接时,retain消息没有转发到新增的桥接目标地址上。(上述中的消息均为同一个主题)。
创建桥接json
{
“name”: “bridge_template”,
“type”: “mqtt”,
“keepalive”: “300s”,
“ssl”: {
“enable”: false
},
“server”: “192.168.0.100:3883”,
“clientid_prefix”: “qqaazz”,
“enable”: true,
“password”: “admin”,
“username”: “admin”,
“proto_ver”: “v4”,
“clean_start”: true,
“retry_interval”: “15s”,
“max_inflight”: 100,
“resource_opts”: {
“query_mode”: “sync”,
“health_check_interval”: “15s”,
“max_buffer_bytes”: 104857600
},
“egress”: {
“local”: {
“topic”: “aa/bb”
},
“remote”: {
“retain”: “${retain}”,
“payload”: “${payload}”,
“topic”: “aa/bb”,
“qos”: “${qos}”
}
}
}
不会自动补发。新建 MQTT 桥接只转发桥接启用后进入 aa/bb 的新消息,不会扫描 EMQX-1 的 Retainer 存量并回放到 EMQX-3。
先建好到 EMQX-3 的桥接,再把这条 retained 消息重新发布一次:
这样这次新发布会经过桥接,并在 EMQX-3 上写成 retained。主题较多时,跑一次迁移客户端:订阅 EMQX-1 的主题集合,收到 retained 后原样发布到 EMQX-3,并保持 retain=true。
PS: 你这 JSON 看起来是旧版 MQTT Bridge 配置。你的 EMQX 的精确版本是多少;${retain} / ${flags.retain} 的可用字段随桥接版本不同。但这个字段只决定“转发出去的消息是否带 retain”,不会触发已有 retained 消息补发。