乐趣区

关于物联网:NanoMQ-Newsletter-202207|v010多路桥接NanoSDK-支持-MQTT-50

7 月,NanoMQ 持续放弃稳步更新。v0.10.0 于 8 月初正式公布(https://github.com/emqx/nanom…)。此版本次要加强了桥接性能,新增了公布音讯的 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 服务进行实时数据同步。

比方咱们想要让 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:物联网音讯传输还有更多可能

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

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

退出移动版