8 月,NanoMQ 继续保持稳步更新。最新的 0.11.0 版本已于 8月底正式发布(https://github.com/emqx/nanomq/releases/tag/0.11.0)。此版本继续增强了桥接功能,增加了 MQTT 5.0 + MQTT over QUIC 桥接模式,新增和修复了对已连接客户端状态进行监控和查询的 HTTP API。此外各项性能优化和缺陷修复也在持续进行中。

桥接功能更新

作为 NanoMQ 最为广泛使用的功能之一,桥接功能本月得到重大更新升级,新增了 2 种桥接模式:MQTT over QUIC 桥接和 MQTT 5.0 协议桥接。

MQTT over QUIC 桥接

继 EMQX 5.0 全球率先发布 MQTT over QUIC 支持后,NanoMQ 项目也为了降低此功能的使用门槛在 0.11 版本推出了 MQTT over QUIC 桥接功能。目前 NanoSDK 已支持以 QUIC 协议作为 MQTT 的传输层,因此与其兼容的 NanoMQ 项目的桥接功能也一并得到了无缝升级。用户可以使用 QUIC 作为 MQTT 协议的传输层来与 EMQX 5.0 消息服务建立桥接进行数据同步,从而为无法集成或找到合适的 MQTT over QUIC SDK 的端侧设备和难以修改固件的嵌入式设备提供在 IoT 场景利用 QUIC 协议优势的捷径。

在需要与云端 MQTT 服务进行数据同步的各种物联网场景中,通过 NanoMQ 的多协议接入能力,可以将其作为边缘消息总线和统一的数据空间,统一汇聚诸如 HTTP、MQTT 3.1.1/5.0、WebSocket、nanomsg/nng 和 ZeroMQ 等常用的 broker/brokerless 消息协议,再由 NanoMQ 内部强大的 Actor 消息处理模型转化成标准的 MQTT 消息后,通过 QUIC 传输层的 0RTT 快速重连和被动地址切换等功能来克服网际漫游、弱网传输和 TCP 队头阻塞等各类常见的物联网连接问题。还可以通过 NanoMQ 的规则引擎对数据做重定向、本地缓存或持久化。依靠 EMQX+NanoMQ 的云边一体化的消息架构,用户能够快速且低成本的在泛物联网场景中完成跨时空地域的数据采集和同步需求。

如何使用 MQTT over QUIC 桥接功能

目前 NanoMQ 的 QUIC 模组处于默认关闭状态,用户如需使用需通过编译选项打开后安装使用,完整的下载和编译安装命令可以参考:

git clone https://github.com/emqx/nanomq.git
cd nanomq ; git submodule update --init --recursive (同步submodule时可能耗时较久)mkdir build && cd build
cmake -G Ninja -DNNG_ENABLE_QUIC=ON ..
sudo ninja install

开启 QUIC 桥接功能的 NanoMQ 编译安装完成后,可以在配置文件/etc/nanomq_bridge.conf中配置 MQTT over QUIC 桥接功能和对应的主题,使用 mqtt-quic 作为 URL 前缀即是采用 QUIC 作为 MQTT 的传输层:

## Bridge address: host:port .
##
## Value: String
## Example: ## Example: mqtt-tcp://broker.emqx.io:1883 (这是标准MQTT over TCP)
bridge.mqtt.emqx.address=mqtt-quic://54.75.171.11:14567## Protocol version of the bridge. (注意:QUIC桥接目前只支持V4即MQTT 3.1.1版本)
bridge.mqtt.emqx.proto_ver=4## Whether to enable bridge mode for mqtt bridge
## Value: boolean
bridge.mqtt.emqx.bridge_mode=true## The ClientId of a remote bridge.
## Default random string.
## Value: String
#bridge.mqtt.emqx.clientid=bridge_client## Ping interval of a down bridge.
## Value: Duration
## Default: 10 seconds
bridge.mqtt.emqx.keepalive=60## The Clean start flag of a remote bridge.
##
## Value: boolean
## Default: true
bridge.mqtt.emqx.clean_start=true## The username for a remote bridge.
bridge.mqtt.emqx.username=username## The password for a remote bridge.
bridge.mqtt.emqx.password=passwd## Topics that need to be forward to IoTHUB
##
## Value: String
## Example: topic1/#,topic2/#
bridge.mqtt.emqx.forwards=topic1/#,topic2/### Need to subscribe to remote broker topics
##
## Value: String
bridge.mqtt.emqx.subscription.1.topic=cmd/topic1

然后启动 NanoMQ 即可:

nanomq start --bridge <PATH of nanomq_bridge.conf>

验证 QUIC 桥接是否成功,只需往桥接的上下行主题发送数据即可,也可以使用 NanoMQ 自带的 nanomq_cli 工具中的 QUIC 客户端来与 EMQX 5.0 测试验证。

MQTT 5.0 桥接

除了 QUIC 桥接,0.11 版本也支持使用 MQTT 5.0 进行桥接,用户只需在配置文件中修改桥接的协议版本即可:

## Protocol version of the bridge. (注意:MQTT 5.0 只适用于 Vanila MQTT)
bridge.mqtt.emqx.proto_ver=5

之后用户就可以通过桥接连接转发 MQTT 5.0 消息了,享受诸如自定义属性等新特性。

HTTP API 更新

通过 HTTP REST API 来对边缘服务进行监控和运维一直是广大普通用户的需求之一,NanoMQ 0.11 也新增了对当前连接的 MQTT 客户端信息的查询 API,方便第三方应用快速准确的获取所有客户端的在线情况,或查询某个特定客户端的健康状态。

获取所有在线客户端的情况:

$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/clients"{"code":0,"data":[{"client_id":"nanomq-f6d6fbfb","username":"alvin","keepalive":60,"conn_state":"connected","clean_start":true,"proto_name":"MQTT","proto_ver":5,"recv_msg":3},{"client_id":"nanomq-bdf61d9b","username":"nanomq","keepalive":60,"conn_state":"connected","clean_start":true,"proto_name":"MQTT","proto_ver":5,"recv_msg":0}]}

通过客户端 ID 查询指定客户端的在线情况

$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/clients/nanomq-29978ec1"{"code":0,"data":[{"client_id":"nanomq-29978ec1","username":"","keepalive":60,"conn_state":"connected","clean_start":true,"proto_name":"MQTT","proto_ver":5}]}

关于 API 的请求和返回参数详情,请参阅 NanoMQ Docs(https://nanomq.io/docs/zh/latest/http-api/v4.html#客户端 )。

其他功能更新

同时,NanoMQ 0.11 还响应用户和社区要求更新和优化了如下功能:

退避时间设置 (Backoff timer)

在 MQTT 协议中规定 Broker 要在 1.5 倍于客户端设置的 Keep Alive 时间后踢出没有活动的连接。但是实际场景中许多用户希望能够自由灵活调节这一时间长度以适应不同的网络环境。所以新增了这一配置选项,用户通过配置该选项来调整 NanoMQ 处理非活动客户端的最大时间上限。

例如,如果按照以下设置,如果一个客户端的 Keep Alive 时间设置为 60s,且一直没有活动,NanoMQ 将会在 1.25 * 60 = 75s 后关闭此客户端的连接。

## The backoff for MQTT keepalive timeout.
## broker will discolse client when there is no activity for
## 'Keepalive * backoff * timeout.
##
## Value: Float > 0.5
keepalive_backoff=1.25

MQTT over QUIC CLI 工具

如果通过-DNNG_ENABLE_QUIC=ON 开启了 QUIC 模块,那么会自动编译 nanomq_cli 中的 MQTT over QUIC 客户端工具:

nanomq_cli quic --help
Usage: quic conn <url>quic sub  <url> <qos> <topic>quic pub  <url> <qos> <topic> <data>## subscribe example
nanomq_cli quic sub mqtt-quic://54.75.171.11:14567 2 msg

Bug 修复及优化

  1. 为 NanoMQ 增加了自动化 CI 测试框架,以保证测试覆盖率。
  2. 修复了 WebSocket&TLS 的传输层。
  3. 增加了 nanomq_cli 工具的帮助信息。
  4. 修复了一个使用共享订阅时可能导致主题匹配不正确的问题。
  5. 修复了客户端使用持久会话后断开连接,会话总是比设定时间更早过期的问题。
  6. 修复了桥接连接使用非异步订阅方式可能造成的线程阻塞问题。

即将到来

下个版本中,NanoMQ 将为大家带来规则引擎的重发布和热更新功能,并且增加桥接连接的状态管理能力。未来 NanoMQ 还将继续设计和规划利用 QUIC 的 Multi-Stream 特性来应对物联网场景里的多种传输媒介共用带来的链接复用问题,也会在 QUIC 的 Flow Control 基础上完成多种类型数据流统一调度的本地数据网关代理功能。

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

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

NanoMQ Newsletter 2022-08|v0.11:MQTT 5.0 + MQTT over QUIC 桥接,新增 HTTP API 监控客户端状态相关推荐

  1. NanoMQ Newsletter 2022-07|v0.10:多路桥接、HTTP 发布 MQTT 消息 API、NanoSDK 支持 MQTT 5.0

    7 月,NanoMQ 继续保持稳步更新.v0.10.0 于 8 月初正式发布(https://github.com/emqx/nanomq/releases/tag/0.10.1).此版本主要增强了桥 ...

  2. MQTT 5.0 特性 Inflight Window Message Queue

    Inflight Window 与 Message Queue 说明 为了提高消息吞吐效率和减少网络波动带来的影响,EMQ X 消息服务器允许多个未确认的 QoS 1 和 QoS 2 报文同时存在于网 ...

  3. 2022年双11淘宝满减规则解读

    2022年双11淘宝满减规则解读 双11期间主要关注双十一红包,那么今年淘宝双11满减活动有没有?因为10月24日20点双11预售就开始了,不少小姐姐想知道2022年淘宝双十一满减是多少,本文小编赵一 ...

  4. 八股文-- 2022.08.31

    途虎养车2022.08.31 在Java中,LinkedList类有而ArrayList类没有的方法是:removeLast()方法 LinkedList :底层基于双向链表实现,不支持高效的随机元素 ...

  5. 最全最强的DELL Leopard综合帖(系统+驱动+问题+进阶+软件) 08.8.11更新

    http://bbs.pcbeta.com/viewthread-284377-1-1.html 最全最强的DELL Leopard综合帖(系统+驱动+问题+进阶+软件) 08.8.11更新 电梯直达 ...

  6. 心理月刊杂志心理月刊杂志社心理月刊编辑部2022年第11期目录

    心理月刊杂志心理月刊杂志社心理月刊编辑部2022年第11期目录 论著_学术探索     自我效能对脑卒中患者自我管理的影响:感知控制与自我感受负担的链式中介作用 钱金平;吴丹;钱国安;钱佩珺;苏娟; ...

  7. H5在线CAD,网页CAD,MxDraw云图平台2022.08.24更新

    SDK开发包下载地址: MxDraw云图平台 2022.08.24更新_梦想CAD控件 1. 增加对像扩展数据功能 2. 增加CAD结合GIS使用功能 https://www.mxdraw3d.com ...

  8. 2022广东省+深圳市+11个区“专精特新”及小巨人企业补贴政策

    深科信整理了2022广东省+深圳市+11个区"专精特新"及小巨人企业补贴政策 广东省 支持工信部认定的专精特新"小巨人".省认定的专精特新中小企业以及2020年 ...

  9. 青春岁月杂志青春岁月杂志社青春岁月编辑部2022年第11期目录

    青春岁月杂志青春岁月杂志社青春岁月编辑部2022年第11期目录 卷首语     父亲的荷包蛋 佚名; 1 文学视野     "那不勒斯四部曲"童话元素研究 徐杨;李婷婷; 4-6 ...

最新文章

  1. 单位斜变函数matlab,实验二 用MATLAB实现线性系统的时域分析
  2. VC问题 IntelliSense:“没有可用的附加信息”,[请参见“C++项目 IntelliSense 疑难解答”,获得进一步的帮助]...
  3. Android自制SwitchBar(附资源)
  4. 深入分析python的and or 返回值
  5. c# SQL CLR 之一
  6. 2016ICPC青岛
  7. Kaggle Bike Sharing Demand Prediction – How I got in top 5 percentile of participants?
  8. C#综合揭秘——深入分析委托与事件(上)
  9. composer php 打包图片,composer 打包到 packagist
  10. Jvm内存分析入门篇
  11. 正态分布的前世今生:误差分布曲线的确立
  12. Linux命令:wget、unzip、cmake、make、vim
  13. Ghostscript介绍和移植
  14. 2022大淘宝技术工程师推荐书单
  15. vue 加载720全景图
  16. english words
  17. 江苏省赛 JSCPC2018 K. 2018
  18. orcal根据身份证获取年龄
  19. violate关键字---java高并发
  20. icpc2018-焦作-E Resistors in Parallel-数论+大数

热门文章

  1. 怎么在各大平台推广app?怎么推广最有效?
  2. ChatGPT 编写模式:如何高效地将思维框架赋予 AI ?
  3. 快速理解Vue 使用 vm.$set 解决对象新增属性不能响应的问题
  4. 地下城英雄 java_地下城英雄手游Java
  5. linux 文件管理
  6. 武汉“精武鸭脖”做法
  7. elasticsearch scroll
  8. Android acra 监控报错日志上报(acra版本4.9)
  9. 好看的美剧《生活大爆炸》
  10. CAD 2014 致命错误 崩溃 英特尔 cpu 11代 12代 xe集显