文档章节

Mosquitto 上建立到 EMQ X 的桥接

EMQX
 EMQX
发布于 08/28 14:13
字数 1491
阅读 48
收藏 0

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

Mosquitto 是一个小型轻量的开源 MQTT Broker,由 C/C++ 语言编写。Mosquitto 采用单核心单线程架构,支持部署在资源有限的嵌入式设备,接入少量 MQTT 设备终端,并实现了 MQTT 5.0 和 3.1.1版本协议。

EMQ X 与 Mosquitto 均完整支持了 MQTT 协议特性,但 EMQ X 支持更多通信协议以及私有协议接入。应用层的功能拓展方面,Mosquitto 缺乏开箱即用的如认证鉴权、规则引擎、数据持久化与高性能消息桥接(EMQ X 企业版)等业务相关功能; 监控运维与可视化管理方面, EMQ X 有完整的现有功能和拓展方案支持;基础功能上 Mosquitto 集群功能羸弱,官方和第三方实现的集群方案均难以支撑物联网大规模海量连接的性能需求。

因此 Mosquitto 并不适合用来做规模化服务的 MQTT Broker,但由于其足够轻量精简,可以运行在任何低功率单片机包括嵌入式传感器、手机设备、嵌入式微处理器上,是物联网边缘消息接入较好的技术选型,结合其桥接功能可以实现消息的本地处理与云端透传。

场景描述

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

EMQ X

集群 集群地址 监听端口
emqx1 192.168.1.100 1883

Mosquitto

地址 监听端口
192.168.1.101 1883

配置 Mosquitto 服务器

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

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

一个简单的配置例

新建桥接

打开 mosquitto.conf 文件,增加一个 connection 以建立一个新的桥接,connection 关键字后的字符串同时也是远端节点上使用的client id:

connection emqx1

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

address 192.168.1.100:1883

配置协议版本
Mosquitto桥接使用的 MQTT 协议版本默认为3.1,要使用3.1.1协议需要在配置中指定。

bridge_protocol_version mqttv311

配置远端节点用户名

remote_username user

配置远端节点密码

remote_password passwd

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

  • 主题模式指定了需要桥接的主题,支持通配符;
  • 方向可以是 in, out 或者 both
  • QoS 为桥接的QoS级别, 如不指定则使用被转发消息原QoS
  • 本地和远程前缀用于主题映射,在转发和接收的消息主题上加上相应前缀,以便应用可以识别消息来源。

以下配置例添加了两条桥接规则:

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

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

配置 EMQ X 服务器

在安装 EMQ X 服务器后,为了使 Mosquitto 桥接可以接入,需要视情况决定是否配置相应的用户认证和鉴权信息。或者在实验阶段为了简化测试,可以使用允许匿名登录和 acl_nomatch 跳过认证和鉴权。

测试配置

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

测试桥接的 out 方向

在'emqx1'上订阅订阅'sensor/#'主题,该主题将接收到 Mosquitto 上报的数据:

$ mosquitto_sub -t "sensor/#" -p 1883 -d -q 1 -h 192.168.1.100

Client mosqsub|19324-Zeus- sending CONNECT
Client mosqsub|19324-Zeus- received CONNACK
Client mosqsub|19324-Zeus- sending SUBSCRIBE (Mid: 1, Topic: sensor/#, QoS: 1)
Client mosqsub|19324-Zeus- received SUBACK
Subscribed (mid: 1): 1

在Mosquitto上发布消息:

mosquitto_pub -t "sensor/1/temperature" -m "37.5" -d -h 192.168.1.101 -q 1
Client mosqpub|19325-Zeus- sending CONNECT
Client mosqpub|19325-Zeus- received CONNACK
Client mosqpub|19325-Zeus- sending PUBLISH (d0, q1, r0, m1, 'sensor/1/temperature', ... (4 bytes))
Client mosqpub|19325-Zeus- received PUBACK (Mid: 1)
Client mosqpub|19325-Zeus- sending DISCONNECT

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

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

测试桥接的 in 方向

在 Mosquitto上订阅 'control/#' 主题,该主题将接收到 EMQ X 上发布的消息:

$ mosquitto_sub -t "control/#" -p 1883 -d -q 1 -h 192.168.1.101
Client mosqsub|19338-Zeus- sending CONNECT
Client mosqsub|19338-Zeus- received CONNACK
Client mosqsub|19338-Zeus- sending SUBSCRIBE (Mid: 1, Topic: control/#, QoS: 1)
Client mosqsub|19338-Zeus- received SUBACK
Subscribed (mid: 1): 1

在 'emqx1'上发布消息,消息将在 'emqx1' 集群中传递,同时桥接到 Mosquitto 本地:

$ mosquitto_pub -t "control/1" -m "list_all" -d -h 192.168.1.100 -q 1
Client mosqpub|19343-Zeus- sending CONNECT
Client mosqpub|19343-Zeus- received CONNACK
Client mosqpub|19343-Zeus- sending PUBLISH (d0, q1, r0, m1, 'control/1', ... (8 bytes))
Client mosqpub|19343-Zeus- received PUBACK (Mid: 1)
Client mosqpub|19343-Zeus- sending DISCONNECT

在 Mosquitto上应能收到该消息:

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

更多信息请访问我们的官网 emqx.io,或关注我们的开源项目 github.com/emqx/emqx ,详细文档请访问 官方文档

© 著作权归作者所有

EMQX
粉丝 4
博文 54
码字总数 71436
作品 0
杭州
私信 提问
centos EMQTTD 集群安装配置与测试验证

安装包下载地址: 在这里我们下载 emqttd-centos6.8-v2.1.2.zip 配置两台主机hosts 安装配置(s1.emqtt.io): 同理配置s2.emqtt.io,分别启动两台节点 加入集群 emqttd@s2.emqtt.io上执行: 或者...

科技小能手
2017/11/12
0
0
EMQ X 3.0-beta.1 版本发布,完整支持 MQTT-5.0 协议

EMQ X 3.0-beta.1 版本发布,版本别名: The Promise of Tomorrow。兼容 MQTT-3.1.1 协议的同时, 完整支持 MQTT-5.0 协议。此外还增加了很多实用的功能特性,重构了核心组件,提升了系统的伸...

emqtt
2018/09/05
1K
1
从 HTTP 到 MQTT:一个移动后端案例概述

在基于位置服务的移动应用领域,移动设备端和服务端之间总是存在大量的交互。设备向服务端发送它的位置信息和其它设备信息,服务端接收这些数据,对它们进行处理,并返回给设备端一些命令。设...

达尔文
2016/12/04
8.7K
8
EMQ X Meetup 深圳

活动简介: Since the EMQ X open source project first launch in 2013, EMQ has rapidly became a global leader of providing messaging and streaming solutions for IoT in 5G era. Its ......

映云科技
03/26
26
0
[12]MQTT mosquitto 单向SSL认证的配置方式

我们知道,MQTT mosquitto支持单向和双向的SSL认证,首先咱们来看一下单项认证的配置文件应该如何配置。所谓的单向SSL证书,指的是,MQTT的客户端访问MQTT的服务器端的时候,如果用到了SSL加...

chancein007
2015/05/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sync.Mutex 互斥锁

说明: 互斥锁用来保证在任一时刻,只能有一个例程访问某对象。Mutex 的初始值为解锁状态。Mutex 通常作为其它结构体的匿名字段使用,使该结构体具有 Lock 和 Unlock 方法。Mutex 可...

李琼涛
12分钟前
3
0
自建redis笔记

自建redis笔记 最近在linux安装了一下redis,特做一些笔记! 本文先单节点启动redis,然后再进行持久化配置,在次基础上,再分享搭建主从模式的配置以及Sentinel 哨兵模式及集群的搭建 单节点...

北极之北
14分钟前
2
0
扛住阿里双十一高并发流量,Sentinel是怎么做到的?

Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景 本文介绍阿里开源限流熔断方案Sentinel功能、原理、架构、快速入门以及相关框架比较 基本介绍 1 名词解释 服务限流 :当系统资源...

分布式系统架构
16分钟前
2
0
事假杨晨龙(Z16021)月薪请假单

svn co URL --username xxx-- password yyy ./

桃花飞舞
40分钟前
3
0
当Activity关闭后,网络请求回调的处理

当我们在使用网络请求的时候,一般都是通过回调来获取请求到的数据。对于网络请求的回调需要注意的几个点 比如我们的回调在Activity中处理数据,当我们把Activity关闭后,如果获取到数据时,...

shzwork
40分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部