乐趣区

关于物联网:桥接-Mosquitto-MQTT-消息至-EMQX

Mosquitto 是一个小型轻量的开源 MQTT 服务器,由 C/C++ 语言编写,采纳单核心单线程架构,反对部署在资源无限的嵌入式设施,接入大量 MQTT 设施终端,并实现了 MQTT 5.0 和 3.1.1 版本协定。Mosquitto 残缺反对了 MQTT 协定 个性,但根底性能上 Mosquitto 集群性能羸弱,官网和第三方实现的集群计划均难以支撑物联网大规模海量连贯的性能需求。

因而 Mosquitto 并不适宜用来做规模化服务的 MQTT 服务器,但因为其足够轻量精简,能够运行在任何低功率单片机包含嵌入式传感器、手机设施、嵌入式微处理器上,是物联网边缘音讯接入较好的技术选型之一,联合其桥接性能能够实现音讯的本地解决与云端透传。

EMQX 是一款大规模分布式物联网 MQTT 音讯服务器,能够高效牢靠连贯海量物联网设施,实时处理散发音讯与事件流数据。EMQX 节点能够被其余类型的 MQTT 服务器 和 MQTT 云服务桥接,实现跨平台的音讯订阅和发送。本文咱们将以一个配置实例来演示如何桥接 Mosquitto MQTT 音讯至 EMQX。

场景形容

假如咱们有一个 EMQX 服务器集群 emqx1,和一台 Mosquitto 服务器,咱们须要在 Mosquitto 上创立一条桥接,把所有传感器主题 sensor/# 音讯转发至 emqx1 集群,并从 EMQX 订阅所有管制主题 control/#

EMQX

得益于 EMQX 规范的 MQTT 协定反对,Mosquitto 能够桥接至任意版本的 EMQX,此处应用 EMQX Cloud 提供的 收费的在线 MQTT 服务器 进行测试:

Mosquitto

本文应用的 Mosquitto 版本为 2.0.14,下载安装形式详见 Mosquitto Download:

简略的 Mosquitto MQTT 桥接示例

配置 Mosquitto 的桥接须要在装置后批改 mosquitto.conf 文件,对于每一个桥接,须要配置的根本内容有:

  • 远端的 EMQX 服务器的地址和端口
  • MQTT 协定参数,如协定版本,keepalive, clean_session 等(如不配置则应用默认值)
  • EMQX 须要的客户端登录信息
  • 须要桥接的音讯的主题
  • 配置桥接主题映射(默认无映射)

以下是最终的配置文件,下文会具体解说每个局部配置的释义:

connection emqx1
address broker.emqx.io:1883
bridge_protocol_version mqttv50
remote_clientid emqx_c
remote_username emqx_u
remote_password public
topic sensor/# out 1
topic control/# in 1

新建 MQTT 桥接

关上 mosquitto.conf 文件,在配置文件开端减少一个 MQTT 桥接配置,应用 emqx1 作为 connection 名称:

connection emqx1

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

address broker.emqx.io:1883

配置 MQTT 协定版本

Mosquitto 桥接应用的 MQTT 协定版本默认为 3.1.1,EMQX 残缺反对 MQTT 5.0 个性,此处应用 MQTT 5.0 版本进行桥接:

bridge_protocol_version mqttv50

配置远端节点客户端 ID

remote_clientid emqx_c

配置远端节点用户名

remote_username emqx_u

配置远端节点明码

remote_password public

指定须要桥接的 MQTT 主题

桥接主题的配置格局为 topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix],它定义了桥接转发和接管的规定,其中:

  • <topic> 指定了须要桥接的主题,反对通配符
  • 方向能够是 out, in 或者 both

    • out: 将本地主题数据发送到远端 Broker
    • in: 订阅远端 Broker 的主题,将数据公布到本地
    • both: 在同一个主题上进行双向桥接
  • qos-level 为桥接的 QoS 级别,如不指定则应用被转发音讯原 QoS
  • local-prefixremote-prefix 对应本地和近程前缀,用于主题映射时在转发和接管的音讯主题上加上相应前缀,以便利用能够辨认消息来源。

对应本文场景能够增加以下两条桥接规定:

topic sensor/# out 1
topic control/# in 1

在配置实现后,须要重新启动 Mosquitto 使 MQTT 桥接配置失效。

配置 EMQX 服务器

应用公共服务器时不须要配置任何参数。理论利用中,为了使 Mosquitto MQTT 音讯桥接胜利,须要视用户 EMQX 的平安配置状况决定是否配置相应的客户端认证和受权信息。

测试配置

咱们能够应用 MQTT 客户端工具来测试 MQTT 桥接的配置是否胜利,此处应用的是 MQTT X CLI,一款由 EMQ 开发的弱小而易用的 MQTT 5.0 命令行工具。

测试桥接的 out 方向

在近程 EMQX 上订阅 sensor/# 主题,期待接管 Mosquitto 桥接上报的数据:

mqttx sub -t "sensor/#" -h broker.emqx.io

在本地 Mosquitto 的 sensor/1/temperature 主题上公布音讯,该音讯将在 Mosquitto 中公布,同时桥接至近程 EMQX:

mqttx pub -t "sensor/1/temperature" -m "37.5" -q 1

此时近程 EMQX 该当能收到 Mosquitto 桥接上报的音讯:

payload:  37.5

测试桥接的 in 方向

在本地 Mosquitto 上订阅 control/# 主题,该主题将接管到近程 EMQX 上公布的音讯:

mqttx sub -t "control/#"

在近程 EMQX 的 control/t/1 主题上公布音讯,音讯将在 EMQX 集群中传递,同时桥接到 Mosquitto 本地:

mqttx pub -t "control/t/1" -m "I'm EMQX" -h broker.emqx.io

此时在 Mosquitto 上应能收到该音讯:

payload:  I'm EMQX

除了 Mosquitto 外,由 EMQ 开源的超轻量级 MQTT 音讯服务器 NanoMQ 同样实用于物联网边缘接入场景,咱们将在后续的文章中带来桥接 NanoMQ 音讯至 EMQX 的教程。

版权申明:本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/bridging-mosquitto-to-emqx-cluster

退出移动版