# MQTT

MQTT 数据桥接是一种连接多个 EMQX 集群或其他 MQTT 服务的方式,其工作原理如下:

  • 按照规则将当前集群的消息转发至桥接服务器;
  • 从桥接服务器订阅主题,收到消息后在当前集群中转发该消息。

前置准备

# 功能清单

# 快速开始

下面将以 EMQX 的 在线 MQTT 服务器 (opens new window) 作为桥接服务器,指导您如何配置连接与桥接。

# 桥接规则

此处使用以下主题映射配置实现本地与远程 MQTT 服务之间的消息桥接:

消息主题方向目标主题
remote/topic/ingressingress (远程 -> 本地)local/topic/ingress
local/topic/egressegress (本地 -> 远程)remote/topic/egress

ingress 模式下的消息服务流程

MQTT 数据桥接 igress 示意图

egress 模式下的消息服务流程

MQTT 数据桥接 egress 示意图

# 通过 Dashboard 配置

  1. 转到 Dashboard 数据集成 -> 数据桥接页面。

  2. 点击页面右上角的创建

  3. 数据桥接类型中选择 MQTT,点击下一步

  4. 输入数据桥接名称,要求是大小写英文字母或数字组合,例如 my_mqtt_bridge

  5. 进行连接相关配置。MQTT 服务地址设为 broker.emqx.io:1883,由于该服务器不需要认证,因此用户名密码留空即可。该区域的其他字段可保留默认设置,也可根据实际场景设置。

  6. 通过入口配置出口配置设定桥接规则。

    提示

    入口配置与出口配置应至少配置一个,您可打开下方的开关进行相关配置。

    • 入口配置(可选):配置桥接规则,将远程 MQTT 服务上的消息转发到本地;我们希望订阅 remote/topic/ingress 下的消息,并将收到的信息转发至 local/topic/ingress 主题,因此将进行如下配置:

      • 远程 MQTT 服务:订阅主题以获取消息

        • 主题:在集群工作模式下,我们可通过共享订阅来避免消息重复,因此填入 $share/g/remote/topic/ingress
        • QoS:选择 0
      • 本地 MQTT 服务:将订阅得到的消息发布到指定主题中,也可以留空,通过配置规则处理并使用 消息重发布 动作转发。

        • 主题:填入 local/topic/ingress
        • QoS:选择 0,或 ${qos} (跟随消息 QoS)。
        • Retain:通过勾选确认是否以保留消息方式发布消息。
        • 消息模版:转发的消息 Payload 模板,支持使用 ${field} 语法提取数据。
    • 出口配置(可选):将本地指定 MQTT 主题下的消息发布到远程 MQTT 服务,可以理解为入口配置的反向数据流。我们希望将 local/topic/egress 主题下的消息转发到远程 MQTT 服务 remote/topic/egress 主题中,因此将进行如下配置:

      • 本地 MQTT 服务:指定待转发的消息主题。

        • 主题:填入 local/topic/egress
      • 远程 MQTT 服务:指定远端服务器的目标主题。

        • 主题:填入 remote/topic/egress
        • QoS:选择 0,或 ${qos} (跟随消息 QoS)。
        • Retain:通过勾选确认是否以保留消息方式发布消息。
        • 消息模版:转发的消息 Payload 模板,支持使用 ${field} 语法提取数据。
  7. 其他配置(可选),根据情况配置同步/异步模式,队列与批量等参数,详细请参考配置参数

  8. 点击创建按钮完成数据桥接创建。

以上操作对应配置文件如下:

bridges.mqtt.my_mqtt_bridge {
  enable = true
  server = "broker.emqx.io:1883"
  username = "emqx_u"
  password = "public"
  proto_ver = "v4"
  clean_start = true
  keepalive = "60s"

  reconnect_interval = "10s"
  egress {
    local {topic = "local/topic/egress"}
    remote {
      payload = "${payload}"
      qos = 1
      retain = true
      topic = "remote/topic/egress"
    }
  }
  ingress {
    local {
      topic = "$share/g/remote/topic/ingress"
      qos = 1
      payload = "${payload}"
    }
    remote {qos = 1, topic = "local/topic/ingress"}
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 配合规则使用

此外,您也可配合规则使用 MQTT 数据桥接,实现更强大、更灵活的数据处理功能。

ingress 方向下,可以将远程 MQTT 服务订阅得到的消息作为规则的数据源:

bridge_igress_rule_link

egress 方向下,可以将规则处理结果作为消息,转发到远程 MQTT 服务的指定主题下:

bridge_egress_rule