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

简介: v0.10.0已于8月初正式发布,此版本主要增强了桥接功能,新增了发布消息的HTTP API,同时还为NanoSDK增加了MQTT 5.0支持。

7 月,NanoMQ 继续保持稳步更新。v0.10.0 于 8 月初正式发布(https://github.com/emqx/nanomq/releases/tag/0.10.1)。此版本主要增强了桥接功能,新增了发布消息的 HTTP API。同时还为 NanoSDK 增加了 MQTT 5.0 支持。各项性能优化和缺陷修复也在持续进行中。

桥接功能更新

桥接功能在 0.10 版本得到了重大更新,增加了多路桥接、AWS IoT Core 内置桥接等功能。这些更新同时也影响了配置文件的格式,v0.10 与 v0.9.0 之前的桥接配置文件(nanomq_bridge.conf)不再兼容,用户升级时需要注意更新配置文件格式。

多路 MQTT 桥接配置

在物联网领域,异构计算和计算卸载是常见的场景,端侧各类无线传感网络的数据往往需要与多个云端同步或被多个应用重复消费。MQTT broker 是解决数据流可重用需求的捷径,而 NanoMQ 作为主要针对边缘计算场景的消息服务,多云桥接也是用户普遍需要的功能。在 v0.9.0 之前,NanoMQ 的 MQTT 桥接只支持单一目标。多路 MQTT 桥接经过测试验证后在 0.10 版本正式推出,能够支持用户通过自定义桥接命名来让 NanoMQ 同时与多个远端 MQTT 服务进行实时数据同步。

多路 MQTT 桥接.png

比如我们想要让 NanoMQ 将特定主题(msg1/#, msg2/#)的消息都同步到云端,同时从云端的主题(cmd/topic1)收取消息并转发给本地的设备。简单配置示例如下:

## Take EMQX & EMQX cloud as example ##
## 以同时桥接到 EMQX 公共服务器和 EMQX Cloud 为例,配置桥接URL ##
bridge.mqtt.emqx.address=mqtt-tcp://broker.emqx.io:1883
bridge.mqtt.cloud.address=mqtt-tcp://emqx.cloud:1883

## 设置桥接的MQTT协议版本,可选MQTT V4和MQTT V5 ##
bridge.mqtt.emqx.proto_ver=4
bridge.mqtt.cloud.proto_ver=4

## 开启桥接状态 ##
bridge.mqtt.emqx.bridge_mode=true
bridge.mqtt.cloud.bridge_mode=true

## 设置桥接客户端的Client ID ##
bridge.mqtt.emqx.clientid=bridge_client
bridge.mqtt.cloud.clientid=bridge_client

## 设置桥接客户端的心跳间隔 ##
bridge.mqtt.emqx.keepalive=60
bridge.mqtt.cloud.keepalive=60

## 设置需要上行同步数据的主题 ##
bridge.mqtt.emqx.forwards=msg1/#,msg2/#
bridge.mqtt.cloud.forwards=msg1/#,msg2/#

## 设置需要下行同步数据的主题 ##
bridge.mqtt.emqx.subscription.1.topic=cmd/topic1
bridge.mqtt.cloud.subscription.1.topic=cmd/topic1

之后启动 NanoMQ,就会根据配置的远端 MQTT 服务的 URL 来自动启动桥接通道,并管理和监控连接健康状态和同步数据。

特别提醒:增加了多路桥接功能后的版本使用不同格式的桥接配置文件,所以 v0.10 不再和 v0.9.0 之前的 nanomq_bridge.conf 兼容。

AWS Bridge

AWS IoT Core 是在欧美广泛使用的公有云 IoT 服务之一。但由于其与标准 MQTT 连接多有不同,且不支持 QoS 2 通信质量,让许多使用标准 MQTT SDK 的客户端设备难以连接和享受出海服务。

NanoMQ 0.10 版本增加了内置 AWS 桥接功能来解决这一问题。NanoMQ 负责将接收到的指定 topic 的数据转发到远端 AWS IoT MQTT Broker,并从 AWS IoT MQTT Broker 订阅指定 topic

使用此内置桥接功能需要默认环境里已经安装了 AWS 的 IoT SDK:

安装AWS SDK

## 下载源码
wget https://github.com/aws/aws-iot-device-sdk-embedded-C/releases/download/202108.00/aws-iot-device-sdk-embedded-C-202108.00.zip

## 解压
unzip aws-iot-device-sdk-embedded-C-202108.00.zip

## 编译
cd aws-iot-device-sdk-embedded-C
mkdir build
cmake -G Ninja -DBUILD_DEMOS=OFF -DCMAKE_C_STANDARD=99 -DINSTALL_TO_SYSTEM=ON ..
ninja

## 安装到系统
sudo ninja install 
sudo cp ../demos/logging-stack/logging_*.h  /usr/local/include/aws/
sudo ldconfig

然后配置 NanoMQ 默认路径下的配置文件/etc/nanomq_aws_bridge.conf,或通过命令行启动 NanoMQ 时指定配置文件 nanomq start --bridge <nanomq_aws_bridge.conf>

配置参数

  • 桥接模式开关(默认false关闭)

    bridge.mqtt.aws.bridge_mode=true
  • AWS IoT Core Endpoint 地址

    bridge.mqtt.aws.host=a2zegtl0x5owup-ats.iot.us-west-2.amazonaws.com
    bridge.mqtt.aws.port=8883
  • MQTT 协议版本

    bridge.mqtt.aws.proto_ver=4
  • 转发 Topic (多个 topic 用逗号,隔开)

    bridge.mqtt.aws.forwards=topic_1,topic_2
  • 订阅 Topic

    bridge.mqtt.aws.subscription.1.topic=cmd/topic1
    bridge.mqtt.aws.subscription.1.qos=1
    ...
    bridge.mqtt.aws.subscription.{n}.topic=cmd/topicn
    bridge.mqtt.aws.subscription.{n}.qos=1

NanoMQ 就能够与 AWS IoT Core 建立桥接,进行数据同步。

由于 AWS 的 C 嵌入式 SDK 不支持跨平台,所以目前此功能并未打包进二进制安装包中。需要使用 AWS 桥接的用户需通过以下命令自行编译安装 NanoMQ 的 AWS IoT Core 桥接功能。

cmake -G Ninja .. -DENABLE_AWS_BRIDGE=ON

sudo ninja install

新增 HTTP API

MQTT 是基于异步模式设计的消息协议,但在许多场景里仍然会和许多第三方应用通过 HTTP REST API 交互,这就需要 MQTT 服务能够同时兼容支持并转换异步和同步模式。所以 NanoMQ 在 0.10 版本响应用户的呼声也加入了支持通过 HTTP API 进行发布消息的功能。

简单的使用方式示例如下:

HTTP 发布消息

/api/v4/mqtt/publish

$ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v4/mqtt/publish" -d \
'{"topic":"a/b/c", "payload":"Hello World", "qos":1, "retain":false, "clientid":"example"}}'

## NanoMQ回复:
{"code":0}

HTTP 批量发布消息

/api/v4/mqtt/publish_batch

$ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v4/mqtt/publish_batch" -d '[{"topic":"a/b/c","payload":"Hello World","qos":1,"retain":false,"clientid":"example"},{"topic":"a/b/c","payload":"Hello World Again","qos":0,"retain":false,"clientid":"example"}]'

## NanoMQ回复:
{"data":[{"topic":"a/b/c","code":0},{"topic":"a/b/c","code":0}],"code":0}

NanoSDK 支持 MQTT 5.0

NanoSDK 在此前支持了以 QUIC 作为 MQTT 传输层来解决弱网环境和网络切换等问题。

7 月中,此项目得到了重大更新:新发布的 NanoSDK 0.7.0 版本支持 MQTT 5.0,并增加更多针对 MQTT 用户的高度封装 API。目前 NanoSDK 已经能够支持 MQTT 5.0 协议的大部分功能特性。

NanoMQ 命令行工具分离

NanoMQ 0.10 还有一个改动需要用户注意,此版本开始将原有的命令行工具箱与 MQTT Broker 服务分离,从不同的命令入口启动。

原 NanoMQ 启动命令:

## NanoMQ Broker:
nanomq broker start
## NanoMQ 客户端:
nanomq pub --url "mqtt-tcp://broker.emqx.io:1883" -t topic -m hello

0.10 版本后的启动命令:

## NanoMQ Broker:
nanomq start
## NanoMQ 客户端:
nanomq_cli pub --url "mqtt-tcp://broker.emqx.io:1883" -t topic -m hello

即将到来 :MQTT 5.0 + MQTT over QUIC 桥接

得益于 NanoSDK 对 MQTT 5.0 和 QUIC 传输层的支持,NanoMQ 的桥接功能即将在 0.11 版本得到重大升级。用户将能够选择 MQTT 5.0 版本进行桥接,或者使用 QUIC 作为桥接连接的传输层,从而为无法集成 QUIC SDK 或者没有合适 MQTT over QUIC SDK 选择的本地端侧设备提供传输层转换,以配合 EMQX 5.0 发挥 QUIC 在弱网环境下的优势。

关于 QUIC 的详解请参考: MQTT over QUIC:物联网消息传输还有更多可能

相关实践学习
消息队列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
目录
相关文章
|
16天前
|
网络协议 物联网 网络性能优化
物联网协议比较 MQTT CoAP RESTful/HTTP XMPP
【10月更文挑战第18天】本文介绍了物联网领域中四种主要的通信协议:MQTT、CoAP、RESTful/HTTP和XMPP,分别从其特点、应用场景及优缺点进行了详细对比,并提供了简单的示例代码。适合开发者根据具体需求选择合适的协议。
41 5
|
6月前
|
网络协议 JavaScript 安全
第十一篇 前沿趋势与展望:深入探索GraphQL、RESTful API、WebSocket、SSE及QUIC与HTTP/3
第十一篇 前沿趋势与展望:深入探索GraphQL、RESTful API、WebSocket、SSE及QUIC与HTTP/3
102 1
|
1月前
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
21 0
|
2月前
|
网络协议 物联网 网络性能优化
物联网江湖风云变幻!MQTT CoAP RESTful/HTTP XMPP四大门派谁主沉浮?
【9月更文挑战第3天】物联网(IoT)的兴起催生了多种通信协议,如MQTT、CoAP、RESTful/HTTP和XMPP,各自适用于不同场景。本文将对比这些协议的特点、优缺点,并提供示例代码。MQTT轻量级且支持QoS,适合大规模部署;CoAP基于UDP,适用于低功耗网络;RESTful/HTTP易于集成但不适合资源受限设备;XMPP支持双向通信,适合复杂交互应用。通过本文,开发者可更好地选择合适的物联网通信协议。
38 2
|
3月前
|
网络协议 物联网 网络性能优化
物联网江湖风云变幻!MQTT CoAP RESTful/HTTP XMPP四大门派谁主沉浮?
【8月更文挑战第14天】本文概览了MQTT、CoAP、RESTful/HTTP及XMPP四种物联网通信协议。MQTT采用发布/订阅模式,轻量高效;CoAP针对资源受限设备,基于UDP,低延迟;RESTful/HTTP易于集成现有Web基础设施;XMPP支持双向通信,扩展性强。每种协议均附有示例代码,助您根据不同场景和设备特性作出最佳选择。
38 5
|
3月前
|
Oracle Java 关系型数据库
JDK版本特性问题之在 JDK 11 中,HTTP Client API 的特点有哪些
JDK版本特性问题之在 JDK 11 中,HTTP Client API 的特点有哪些
|
4月前
|
消息中间件 API 数据库
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
|
4月前
|
缓存 JSON 算法
http【详解】状态码,方法,接口设计 —— RestfuI API,头部 —— headers,缓存
http【详解】状态码,方法,接口设计 —— RestfuI API,头部 —— headers,缓存
62 0
|
5月前
|
传感器 物联网
物联网协议概述:MQTT、CoAP 和 HTTP
【6月更文挑战第3天】探索物联网的三大协议——MQTT、CoAP 和 HTTP。MQTT 是高效的消息传递使者,适用于大规模、不稳定网络环境;CoAP 小巧灵活,适合资源有限的设备;HTTP 则是熟悉的网络通信老将。根据不同场景选择合适的协议,让物联网设备有效交流。示例代码展示它们的使用方式。
162 0
|
6月前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
74 3