更强大的 MQTT over QUIC 桥接 & Azure 桥接

简介: 十月,NanoMQ保持稳步更新,最新的0.13版本将于近日发布:此版本聚焦于桥接功能,并新增了规则引擎消息重发布功能。

金秋十月,NanoMQ 继续保持稳步更新,最新的 0.13 版本将于近日正式发布。此版本的更新继续聚焦于桥接功能部分:为原来的 MQTT over QUIC 桥接功能增加了多路桥接和更丰富的 QUIC 传输层配置参数,新增了内置的 Azure 桥接功能。另外新增了规则引擎消息重发布功能。

更完善的 MQTT over QUIC 桥接

在 0.12 版本中推出的 MQTT over QUIC 桥接功能与 EMQX 5.0 配合使用得到了用户的热烈反响。在 0.13 版本中,我们为此功能进行了多项加强:

多路桥接

原先的 MQTT over QUIC 桥接功能只能支持连接一个服务端,这无法满足多路数据同步和传输的要求。与传统的基于 TCP 的 MQTT 连接相同,NanoMQ 也为基于 QUIC 的桥接功能的传输层做了优化,使其能够支持同时建立多个 MQTT over QUIC 连接。用户只需要和使用标准 MQTT 桥接功能一样,在配置文件中设置多个桥接目标配置(只摘录部分相关):

## Bridge via both TCP & QUIC ##
## 以同时桥接到EMQX公共服务器和EMQX Cloud为例,配置桥接URL ##
bridge.mqtt.emqx1.address=mqtt-quic://broker.emqx.io:14567
bridge.mqtt.emqx2.address=mqtt-quic://54.75.171.11:14567
bridge.mqtt.emqx3.address=mqtt-tcp://broker.emqx.io:1883

......

多路桥接时,桥接数据是会同时发布给每个桥接对象的。NanoMQ 也支持同时进行基于 TCP 和 QUIC 的 MQTT 桥接。

QUIC & TCP 自动切换

MQTT over QUIC 能够帮助 IoT 应用极大改善弱网状态下的数据传输和地址迁移问题。但由于 QUIC 是基于 UDP 的,目前许多运营商仍然对 UDP 包有特殊的路由策略,这往往导致 QUIC 连接无法成功建立或一直被丢包。NanoMQ 也考虑到需要应对复杂的中间网络问题,特地推出了 QUIC 连接失败时自动切换至标准 MQTT over TCP 桥接的功能。

QUIC & TCP 自动切换 图1.png

使用时只需要在配置文件中设置新增的 bridge.mqtt.emqx.hybrid_bridging 选项为 true 来开启这一模式。注意目前并不能自动切换回 QUIC,后续再备用桥接目标功能中会支持这一需求。另外,因为此过程不计为连接通断,所以也不会发出桥接断开/连接的上下线事件消息。

更丰富细致的配置选项

QUIC 作为新晋的网络标准,而且具有一定的设计自由度,所以往往需要针对不同的网络环境和场景修改其内部参数,为此 NanoMQ 暴露了一些常用的配置选项,以下是对它们的详细解释:

## Newly added config params for QUIC ##
##--------------------------------------------------------------------

## Ping: QUIC 传输层发送Ping包的时间间隔
##
## Value: Duration
## Default: 120 seconds
bridge.mqtt.emqx.quic_keepalive=120

## Idle Timeout: 保持QUIC连接的最大空闲时间,超过此设置时间长度的无活动连接将会被主动关闭。
设置为0的话就不侦测无活动连接,若MQTT层keepalive设置的过大,这会造成僵尸连接的风险
## Value: Duration
## Default: 120 seconds
bridge.mqtt.emqx.quic_idle_timeout=120

## Disconnect Timeout: QUIC Stream 最大等待对端ACK的时间,超过此时间未收到回应的Stream
会被认为无效并断开。
## Value: Duration
## Default: 20 seconds
bridge.mqtt.emqx.quic_discon_timeout=20

## Handshake Timeout: NanoMQ建立QUIC连接时的最大等待时间 
## Value: Duration
## Default: 60 seconds
bridge.mqtt.emqx.quic_handshake_timeout=60

## Hybrid bridging: 混合桥接模式的开关,若开启会根据QUIC链接的建立情况自动退回 MQTT over
 TCP 桥接模式
## Value: true/false
## Default: false
bridge.mqtt.emqx.hybrid_bridging=false
##
##--------------------------------------------------------------------

QUIC 桥接支持 SQLite 数据缓存

NanoMQ 的桥接功能一大特色是桥接能够支持断网数据本地缓存,网络恢复自动重传。之前此项功能只对标准的 MQTT over TCP 有效。从 0.13 版本开始,当开启 SQLite 自动缓存功能时,此功能对 QUIC 桥接也同样有效。

自动化发布包含 QUIC 功能的安装包

在 0.12 版本,用户如果想要使用 NanoMQ 的 QUIC 相关功能,需要自行下载源码编译安装,过程较为复杂。为了方便用户使用,从 0.13 版本开始,NanoMQ 新增了自动化编译打包流程,每次都会自动编译出包含 QUIC 库在内的二进制包供用户直接安装使用。希望以此来降低项目中引入 QUIC 功能的上手门槛,用户只需简单安装 EMQX 5.0 + NanoMQ 并做相应配置即可。

Azure IoT Hub 桥接

微软的 Azure 云服务有提供一个兼容部分 MQTT 协议的物联网服务:IoT Hub,详情可参阅微软官方文档(了解 Azure IoT 中心 MQTT 支持 )。NanoMQ 也内置支持了与其的桥接功能,具体使用方式如下:

Azure 强制要求必须使用 TLS 加密连接,且使用的 Topic 和认证用的用户名密码必须在其控制台预先创建设备来配置使用。

Azure IoT Hub 桥接 图2.png

目前 NanoMQ 只支持使用对称秘钥加密和用户名+密码的方式认证链接 Azure IoT Hub。

配置后的页面如图:

Azure IoT Hub 桥接 图3.png

之后修改桥接配置文件,其中需要特殊对待的配置有:

bridge.mqtt.azure.address=tls+mqtt-tcp://azure-iot-hub.net:8883 (使用Azure提供的主机名)
bridge.mqtt.azure.clientid=device01 (使用在Azure控制台创建的设备名)
bridge.mqtt.azuer.username= {iothubhostname}/{device_id}/?api-version=datetime
(主机名+设备名+API版本日期拼接而成)
bridge.mqtt.azuer.password=***** ( 使用SAS令牌,需要用Azure提供的工具本地生成 )
bridge.mqtt.azuer.tls.enable=true (必须使用TLS加密)
bridge.mqtt.azuer.forwards=devices/{device_id}/messages/events/
bridge.mqtt.azuer.subscriptions.1.topic=devices/{device_id}/messages/devicebound/#
(订阅和发布的主题必须按照Azure规则配置)

例:使用VS Code生成SAS令牌的方法 图4.png

如此启动 NanoMQ 就能够完成将本地标准 MQTT 客户端的消息转换桥接至 Azure IoT Hub。

规则引擎消息重发布

规则引擎消息重发布功能在 v0.13 中测试完成正式发布。支持根据用户编写的 SQL 语句将本机 NanoMQ 里命中的消息修改后重新发布到目标 MQTT 服务的主题。简单示例如下:

## 重新发布消息到此目标主机:
rule.repub.1.address=mqtt-tcp://broker.emqx.io:1883
## 重新发布到此目标主题:
rule.repub.1.topic=topic/repub1
## 根据如下规则过滤本机NanoMQ的消息:
rule.event.publish.1.sql="SELECT topic, payload FROM "abc""

如此就能将本地 NanoMQ 的”abc”主题中的消息和主题名一起组合成新的消息转发给云端公有的 EMQX MQTT 服务。

同时,这一版本开始规则引擎也能够支持使用 HTTP API 来对部分规则进行热更新。

即将到来

目前 NanoMQ 正计划将配置文件格式更新为更易读的 HOCON(Human-Optimized Configuration Object Notation)。关于配置文件使用体验,欢迎用户在 Github 提出宝贵建议。同时 NanoMQ 还将增加 Reload 命令和 HTTP API 来支持部分配置选项的热更新,并增加 ACL 支持等功能。

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

原文链接:https://www.emqx.com/zh/blog/nanomq-newsletter-202210

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
EMQ
|
Kubernetes Cloud Native 物联网
在 Kubernetes 上体验 EMQX 5.0 的 MQTT over QUIC 特性
本文将介绍如何在 Kubernetes 上部署 EMQX 集群并开启 MQTT over QUIC 功能。
EMQ
140 0
在 Kubernetes 上体验 EMQX 5.0 的 MQTT over QUIC 特性
EMQ
|
监控 安全 数据可视化
EMQX Enterprise 5.1 正式发布:生产环境就绪的 MQTT over QUIC、基于 MQTT 的文件传输支持
EMQX Enterprise 5.1 单集群可达 1 亿客户端连接;创新性地引入 MQTT over QUIC 协议;同时提供了 MQTT 大文件传输能力以及可视化数据集成能力。
EMQ
255 0
EMQX Enterprise 5.1 正式发布:生产环境就绪的 MQTT over QUIC、基于 MQTT 的文件传输支持
EMQ
|
存储 监控 网络协议
工业物联网数据桥接教程:Modbus 桥接到 MQTT
通过将 Modbus RTU 或 TCP 转换为 MQTT 消息,可以轻松地将设备数据发送到云端,并在需要时进行远程控制和监控。
EMQ
835 0
工业物联网数据桥接教程:Modbus 桥接到 MQTT
EMQ
|
SQL 存储 边缘计算
使用 eKuiper 按需桥接 CAN Bus 数据至 MQTT
本文将通过使用开源边缘流式 SQL 引擎 eKuiper ,灵活地从 CAN Bus 提取有意义的数据和所需的信号,实现从 CAN Bus 到 MQTT 的无缝桥接。
EMQ
142 0
使用 eKuiper 按需桥接 CAN Bus 数据至 MQTT
EMQ
|
网络协议 物联网 Java
从零开始上手 MQTT over QUIC:快速体验下一代物联网标准协议
为了更多用户能体验到MQTT over QUIC为物联网消息传输带来的提升,我们将通过本文指导您如何从零开始上手使用MQTT over QUIC。
EMQ
607 0
从零开始上手 MQTT over QUIC:快速体验下一代物联网标准协议
EMQ
|
传感器 安全 物联网
桥接 Mosquitto MQTT 消息至 EMQX
大规模分布式物联网MQTT消息服务器EMQX的节点可以被其他类型的MQTT服务器和MQTT云服务桥接,实现跨平台的消息订阅和发送。本文演示如何桥接Mosquitto MQTT消息至EMQX。
EMQ
454 0
桥接 Mosquitto MQTT 消息至 EMQX
EMQ
|
消息中间件 缓存 监控
NanoMQ Newsletter 2022-08|v0.11:MQTT 5.0 + MQTT over QUIC 桥接,新增 HTTP API 监控客户端状态
八月,0.11.0版本发布:增加了MQTT 5.0+MQTT over QUIC桥接模式,新增和修复了对已连接客户端状态进行监控和查询的HTTP API。
EMQ
334 0
NanoMQ Newsletter 2022-08|v0.11:MQTT 5.0 + MQTT over QUIC 桥接,新增 HTTP API 监控客户端状态
|
1天前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
5天前
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!
|
7天前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
25 2

热门文章

最新文章