在 VerneMQ 上建立到 EMQ X 的桥接

    EMQ X 节点可以被其他类型的 MQTT 消息中间件桥接,实现跨平台的消息订阅和发送。在这个章节我们以一个配置例来说明如何配置 VerneMQ 到 EMQ X 的桥接。

    假设我们有一台 EMQ X 服务器'emqx1',和一台 VerneMQ 服务器,我们需要在 VerneMQ 上创建一条桥接,把所有"传感器(sensor)"主题消息转发至 'emqx1' 服务器,并从 EMQ X 订阅所有"控制(control)"主题。

    EMQ X

    VerneMQ

    地址监听端口
    192.168.1.1011883

    配置 VerneMQ 的桥接需要在安装后修改 文件。对于每一个桥接,需要配置的基本内容有:

    • 远端的 EMQ X 服务器的地址和端口;
    • MQTT 协议参数,如协议版本,keepalive, clean_session等(如不配置则使用默认值);
    • EMQ X 需要的客户端登录信息;
    • 需要桥接的消息的主题;
    • 配置桥接主题映射(默认无映射)。

    配置桥接远端节点的地址和端口

      配置远端节点用户名

      1. vmq_bridge.tcp.br0.username = user

      配置远端节点密码

      指定需要桥接的主题桥接主题的配置格式为 vmq_bridge.tcp.br0.topic.1 = 主题模式 方向 QoS 本地前缀 远端前缀,它定义了桥接转发和接收的规则。其中:

      • 主题模式指定了需要桥接的主题,支持通配符。需要注意的是,在VerneMQ的配置中"#"通配符会被作为注释处理,需要用"*"代替;
      • 方向可以是in, out 或者 both
      • QoS 为桥接的QoS级别, 默认QoS级别为"0"
      • 本地和远程前缀用于主题映射,在转发和接收的消息主题上加上相应前缀,以便应用可以识别消息来源。以下配置例添加了两条桥接规则:
      1. vmq_bridge.tcp.br0.topic.1 = sensor/* out 1
      2. vmq_bridge.tcp.br0.topic.2 = control/* in 1

      在配置完成后,需要重新启动VerneMQ使桥接配置生效。

      我们使用 mosquitto_sub 和 工具来测试桥接的配置是否成功。

      在'emqx1'上订阅订阅'sensor/#'主题:

      1. $ mosquitto_sub -t "sensor/#" -p 1883 -d -q 1 -h 192.168.1.100
      2. Client mosqsub|19324-Zeus- sending CONNECT
      3. Client mosqsub|19324-Zeus- received CONNACK
      4. Client mosqsub|19324-Zeus- sending SUBSCRIBE (Mid: 1, Topic: sensor/#, QoS: 1)
      5. Subscribed (mid: 1): 1

      在VerneMQ上发布消息:

      在'emqx1'上应能收到该消息:

      1. Client mosqsub|19324-Zeus- received PUBLISH (d0, q1, r0, m1, 'sensor/1/temperature', ... (4 bytes))
      2. Client mosqsub|19324-Zeus- sending PUBACK (Mid: 1)

      在VerneMQ上订阅 'control/#'主题:

      1. $ mosquitto_sub -t "control/#" -p 1883 -d -q 1 -h 192.168.1.101 -u user -P passwd
      2. Client mosqsub|19338-Zeus- sending CONNECT
      3. Client mosqsub|19338-Zeus- received CONNACK
      4. Client mosqsub|19338-Zeus- sending SUBSCRIBE (Mid: 1, Topic: control/#, QoS: 1)
      5. Client mosqsub|19338-Zeus- received SUBACK
      6. Subscribed (mid: 1): 1

      在VerneMQ上应能收到该消息:

      1. Client mosqsub|19338-Zeus- received PUBLISH (d0, q1, r0, m2, 'control/1', ... (8 bytes))
      2. Client mosqsub|19338-Zeus- sending PUBACK (Mid: 2)