三月初春,万物复苏,NanoMQ 项目(https://github.com/nanomq/nanomq)也迎来了一个重大更新:第一个长期支持(LTS)版本 v0.6.6 正式发布。
在未来的一年里,这一版本会和主分支同时维护并得到所有重要的功能更新。在 0.6.6 版本里我们增加了内置性能测试工具,丰富了 HTTP APIs 的支持,这也是第一个能够较完整同时兼容支持 MQTT 5.0 & 3.1.1 特性的版本。
nano_bench 工具
在一月的 Newsletter 中我们预告的压力测试工具本月如期而至。
nano_bench 是我们基于 NanoSDK 开发的性能测试工具,类似于 emqtt_bench。这是其第一个正式版本,欢迎用户试用并提出意见。
nano_bench 工具在默认的发行版里并不携带,需要您通过设置-DBUILD_BENCH=ON参数来编译安装以启用:
$ cmake -G Ninja -DBUILD_BENCH=ON ..$ Ninja
编译完成后,执行以下命令确认可以正常使用:
$ nanomqavailable applications:* broker* pub* sub* conn* bench* nngcatEMQ X Edge Computing Kit v0.6.6-3Copyright 2022 EMQ X Edge Team
$ nanomq bench startUsage: nanomq bench start { pub | sub | conn } [--help]
bench
有以下三个子命令:
pub
:用于创建大量客户端来执行发布消息的操作。sub
:用于创建大量客户端订阅主题和接收消息。conn
:用于创建大量连接。
执行 nanomq bench start pub --help
时,您将获得可用的参数输出。

例如,我们启动 10 个连接,每秒向主题 t 发送 100 条 QoS0 消息,其中每个消息负载的大小为 16 字节:
$ nanomq bench start pub -t msg -h broker.emqx.io -s 16 -q 0 -c 10 -I 100
执行 nanomq bench start sub --help
以获取此子命令的所有可用参数。它们的解释已包含在上表中,不同在于没有了发送频率参数,此处不再赘述。
例如,我们启动 500 个连接,每个连接使用 QoS0 订阅 t
主题:
$ nanomq bench start sub -t msg -h broker.emqx.io -c 500
执行 nanomq bench start conn --help
以获取此子命令的所有可用参数。参数选项与其他命令大致相同。此处不再赘述。
例如,我们启动 1000 个客户端去连接公用的 EMQX 服务器:
$ nanomq bench start conn -h broker.emqx.io -c 1000
bench
也支持建立 SSL 安全连接来执行测试。
单向认证
$ nanomq bench start sub -c 100 -i 10 -t bench -p 8883 -S$ nanomq bench start pub -c 100 -I 10 -t bench -p 8883 -s 256 -S
双向认证
$ nanomq bench start sub -c 100 -i 10 -t bench -p 8883 --certfile path/to/client-cert.pem --keyfile path/to/client-key.pem$ nanomq bench start pub -c 100 -i 10 -t bench -s 256 -p 8883 --certfile path/to/client-cert.pem --keyfile path/to/client-key.pem
结合之前 NanoMQ 的 Pub/Sub/Conn 工具,现在只需要安装 NanoMQ 命令行工具套装就能轻松获得 MQTT 3.1.1 的全套测试能力。
MQTT 5.0 特性支持
在 v0.6.6 之前的版本里,NanoMQ 无法兼容 MQTT 5.0 和 3.1.1 客户端进行通信。现在我们完善了 MQTT 5.0 的特性支持和兼容性,能够在内部进行不同版本客户端的消息互通和转换。
目前已支持以下重要且常用的 MQTT 5.0 特性:
Shared Subscription 共享订阅
User Property 用户属性
Will Delay Interval 遗愿消息延时间隔
MQTT 5.0 CONNECT/PUBLISH/PUBACK/PUBREL/PUBCOMP/SUBSCRIBE/SUBACK/DISCONNECT 等基础功能
以下 MQTT 5.0 特性将在后续版本中陆续支持:
Authentication 认证服务
Response Topic & Correlation Data 响应主题
Subscription Identifier 订阅标识符
Reason String 原因字符串
Message expiry interval 消息过期间隔时间
* 注:NanoMQ 的上下线事件主题和消息仍然保留为 MQTT 3.1.1。
HTTP API
完善的 HTTP API 系统是用户控制和监控 Broker 的一个重要途径。0.6.6 版本我们也新增了 2 组重要的HTTP APIs。下面将对其进行简单介绍:
NanoMQ 的 HTTP API 使用 Basic 认证 (opens new window)*方式。username
和 password
须分别填写。默认的 username
和 password
是:admin/public
。可通过 etc/nanomq.conf
配置文件修改 username
和password
。
* 详细内容请参阅:
https://en.wikipedia.org/wiki/Basic_access_authentication
第一组是统计信息 API。
Parameters (JSON)

Success Response Body (JSON)

Examples
$ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v1" -d '{"req": 2,"seq": 1}'{"code":0,"seq":1,"rep":2,"data":{"client_size":1,"message_in":4,"message_out":0,"message_drop":4}}
主题信息:返回客户端标识符对应的主题和 QoS 信息。
Parameters (JSON)

Success Response Body (JSON)

Examples
$ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v1" -d '{"req": 4,"seq": 1111111}'{"code":0,"seq":1111111,"rep":4,"data":[{"client_id":"nanomq-ebd54382","subscriptions":[{"topic":"a/b/c","qos":0}]}]}
客户端信息:返回所有的客户端信息。
Parameters (JSON)

Success Response Body (JSON)

Examples
$ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v1" -d '{"req": 5,"seq": 1111111}'{"code":0,"seq":1111111,"rep":5,"data":[{"client_id":"nanomq-ebd54382","username":"nanmq","keepalive":60,"protocol":4,"connect_status":1,"message_receive":0}]
另一组是通过 HTTP API 来修改 NanoMQ 的配置参数,主要用于提供服务端远程管理 NanoMQ 的能力。
设置配置参数:设置 Broker 配置参数。
Parameters (JSON)

* 详细内容请参阅:
https://nanomq.io/docs/zh/latest/http-api.html#api-endpoints-post-api-v1
Success Response Body (JSON)

* 注:远程修改配置后,需要重启 NanoMQ 以生效。
关于其他 HTTP API 支持以及返回码和状态码具体细节请参阅:
https://nanomq.io/docs/zh/latest/http-api.html
Bug 修复
本月,NanoMQ 继续收集社区反馈并积极修复问题。修复了如下重要 Bug,请使用旧版本的用户酌情升级。
修复桥接连接在极高吞吐时会进入无响应状态的问题。
修复了一个 NanoSDK 0.3 版本里的死锁问题。
修复共享订阅和通配符共用时导致的无法收到消息的问题。
其他动态
NanoMQ 0.7.0 版本将会引入 SQLite 作为 QoS+ 会话保持/消息持久化缓存的选项,敬请关注。





