桥接 Mosquitto MQTT 消息至 EMQX

简介: 大规模分布式物联网MQTT消息服务器EMQX的节点可以被其他类型的MQTT服务器和MQTT云服务桥接,实现跨平台的消息订阅和发送。本文演示如何桥接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/#

桥接 Mosquitto.png

EMQX

得益于 EMQX 标准的 MQTT 协议支持,Mosquitto 可以桥接至任意版本的 EMQX,此处使用 EMQX Cloud 提供的 免费的在线 MQTT 服务器 进行测试:

1.png

Mosquitto

本文使用的 Mosquitto 版本为 2.0.14,下载安装方式详见 Mosquitto Download

2.png

简单的 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

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
3月前
|
传感器 网络协议 物联网
在Linux中搭建Mosquitto MQTT协议消息服务端并结合内网穿透工具实现公网访问
Mosquitto是一个开源的消息代理,它实现了MQTT协议版本3.1和3.1.1。它可以在不同的平台上运行,包括Windows、Linux、macOS等。mosquitto可以用于物联网、传感器、移动应用程序等场景,提供了一种轻量级的、可靠的、基于发布/订阅模式的消息传递机制。
|
6月前
|
存储 传感器 物联网
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
324 0
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
|
1月前
|
编解码 Ubuntu 算法
【Linux】NUC977移植使用MQTT(基于mosquitto)
【Linux】NUC977移植使用MQTT(基于mosquitto)
|
6月前
|
传感器 JavaScript 前端开发
如何为 Mosquitto MQTT 代理启用 WebSocket?
如何为 Mosquitto MQTT 代理启用 WebSocket?
186 2
如何为 Mosquitto MQTT 代理启用 WebSocket?
|
6月前
|
安全 数据安全/隐私保护
如何为 Mosquitto MQTT Broker 配置 MQTT TLS 和基于证书的授权
如何为 Mosquitto MQTT Broker 配置 MQTT TLS 和基于证书的授权
528 1
EMQ
|
9月前
|
监控 安全 数据可视化
EMQX Enterprise 5.1 正式发布:生产环境就绪的 MQTT over QUIC、基于 MQTT 的文件传输支持
EMQX Enterprise 5.1 单集群可达 1 亿客户端连接;创新性地引入 MQTT over QUIC 协议;同时提供了 MQTT 大文件传输能力以及可视化数据集成能力。
EMQ
199 0
EMQX Enterprise 5.1 正式发布:生产环境就绪的 MQTT over QUIC、基于 MQTT 的文件传输支持
EMQ
|
9月前
|
存储 监控 网络协议
工业物联网数据桥接教程:Modbus 桥接到 MQTT
通过将 Modbus RTU 或 TCP 转换为 MQTT 消息,可以轻松地将设备数据发送到云端,并在需要时进行远程控制和监控。
EMQ
527 0
工业物联网数据桥接教程:Modbus 桥接到 MQTT
EMQ
|
10月前
|
SQL 传感器 JSON
使用 EMQX 和 eKuiper 进行 MQTT 流处理:快速教程
了解如何使用 EMQX 和 eKuiper 进行 MQTT 流处理,实现实时数据处理、转换和分析。优化您的 MQTT 数据流处理能力,提高物联网应用的效率和性能。
EMQ
213 0
使用 EMQX 和 eKuiper 进行 MQTT 流处理:快速教程
EMQ
|
10月前
|
机器学习/深度学习 传感器 存储
基于 EMQX 和 Neuron 的工业物联网 MQTT Sparkplug 解决方案
在本文中,我们将使用开源分布式 MQTT Broker EMQX,以及边缘工业协议网关软件 Neuron,来构建一个可扩展和稳健的平台,用于实现 Sparkplug 解决方案。
EMQ
151 0
基于 EMQX 和 Neuron 的工业物联网 MQTT Sparkplug 解决方案
EMQ
|
10月前
|
Kubernetes Cloud Native 物联网
在 Kubernetes 上体验 EMQX 5.0 的 MQTT over QUIC 特性
本文将介绍如何在 Kubernetes 上部署 EMQX 集群并开启 MQTT over QUIC 功能。
EMQ
100 0
在 Kubernetes 上体验 EMQX 5.0 的 MQTT over QUIC 特性