NanoMQ Newsletter 2022-07|v0.10:多路桥接、NanoSDK 支持 MQTT 5.0

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

EMQ(杭州映云科技有限公司)是一家开源物联网数据基础设施软件供应商,交付全球领先的开源 MQTT 消息服...

305 声望
429 粉丝
0 条评论
推荐阅读
EMQX 在 Kubernetes 中如何进行优雅升级
为了降低 EMQX 在 Kubernetes 上的部署、运维成本,我们将一些日常运维能力进行总结、抽象并整合到代码中,以 EMQX Kubernetes Operator 的方式帮助用户实现 EMQX 的自动化部署和运维。

EMQX阅读 331

一个物联网云平台一线开发者对物联网平台的全面认知
一个物联网云平台一线开发者对物联网平台的全面认知。​物联网平台的理解;物联网平台的商业化运作目标;物联网平台的架构分析;物联网平台核心能力分析;物联网平台玩家的基本情况;物联网平台的价值;物联网平台...

石志远1阅读 1.5k

封面图
什么是MircoPython?
摘要:互联网玩家为了让Python这样的容易学,简单易学、社区API丰富的语言可以在嵌入式领域用上,逐渐开始了一轮Python上嵌入式的迁移,这样就有了今天的主角——MircoPython。

华为云开发者联盟1阅读 1.3k

这些调试API技巧你熟悉吗?
通常,我们在调试第三方提供的API时,有时候并没那么顺畅,甚至可能本身就是API服务有问题,但是需要提供你结论的"依据"。下面整理了一些API调试技巧,也方便你甩锅

树酱阅读 994

新周期重构地产与物业数智化价值,TVP行业大使有话说
新周期下,地产与物业如何重构数智化价值、助力企业穿越周期?9 月 16 日,由腾讯云 TVP、腾讯云智慧地产、长城物业联合主办,以“后疫情时代——重构地产与物业数智化价值”为主题的 TVP 行业大使地产闭门会在深圳市...

腾讯云开发者阅读 734

封面图
畅捷通T+与旺店通·企业奇门对接集成接口
畅捷通T+是一款新型互联网企业管理软件,全面满足成长型小微企业对其灵活的业务流程的管控需求,重点解决往来业务管理、订单跟踪、资金、库存等管理难题。产品支持您通过各种固定或移动设备随时迅速获取企业实时...

大仲马小茶花阅读 731

用友U8和旺店通·企业奇门单据接口集成
慧策最先以旺店通ERP切入商家核心管理痛点——订单管理,之后围绕电商经营管理中的核心管理诉求,先后布局流量获取、会员管理、仓库管理等其他重要经营模块。慧策的产品线从旺店通ERP起步,向前向后延伸,全面布局...

大仲马小茶花阅读 725

EMQ(杭州映云科技有限公司)是一家开源物联网数据基础设施软件供应商,交付全球领先的开源 MQTT 消息服...

305 声望
429 粉丝
宣传栏