NanoMQ 是面向边缘计算的 MQTT 音讯引擎 + 多协定音讯总线。反对 MQTT 协定和 ZeroMQ 和 Nanomsg 等不同边缘罕用总线协定,集成 broker 和 brokerless 音讯模式,不便打造物联网边缘计算利用。
社区站地址:https://nanomq.io/zh
GitHub 仓库:https://github.com/emqx/nanomq
NanoMQ 我的项目始终放弃着每月一个小版本 + 一个重要新性能的稳步迭代速度,v0.8.0 已于五月底正式公布(下载地址:https://github.com/emqx/nanom…)。此次咱们为大家带来了 2 个重要的性能更新:Event WebHook 以及能够与第三方 HTTP API 集成的连贯认证接口。同时还新增了查看主题树结构的 HTTP API,各项性能优化和缺点修复也在继续更新中。
高效易用的边缘 WebHook 零碎
WebHook 是 EMQX 深受宽广开源用户青睐的一项性能,NanoMQ 也应社区呼声推出了雷同的性能不便用户与第三方边缘计算利用集成。
NanoMQ 的 WebHook 零碎与 EMQX 一脉相承,采纳雷同格调的配置形式。Webhook 的配置文件默认查找的门路为 /etc/nanomq_web_hook.conf,也能够通过命令行指定门路读取配置文件启动。具体配置项可查看 NanoMQ Docs:https://nanomq.io/docs/zh/lat… 配置项。
web.hook.enable=true
## 格局示例
web.hook.rule.<Event>.<Number>=<Rule>
在设置中启用 WebHook 性能后,能够依据本人的须要配置触发规定,如须要将客户端高低线事件和所有匹配到”webhook/msg/#”通配符主题的音讯都转发到对应 HTTP API,则配置形式如下:
触发规定配置
在 etc/nanomq_web_hook.conf 可配置触发规定,其配置的格局如下:
## 示例
web.hook.enable=true
web.hook.url=http://127.0.0.1:8888
web.hook.headers.content-type=application/json
web.hook.body.encoding_of_payload_field=plain
web.hook.pool_size=32
web.hook.rule.client.connack.1={"action": "on_client_connack"}
web.hook.rule.client.disconnected.1={"action": "on_client_disconnected"}
web.hook.rule.message.publish.1={"action": "on_message_publish", "topic": "webhook/msg/#"}
如此设置就能让 NanoMQ 主动捕捉并吐出客户端高低线和音讯公布的数据到对应的 HTTP API 了。目前 HTTP 申请的数据格式示例如下:
## HTTP json 格局示例
Connack(客户端连贯胜利事件):
{
"proto_ver": 4,
"keepalive": 60,
"conn_ack": "success",
"username": "undefined",
"clientid": "nanomq-6ecb0b61",
"action": "client_connack"
}
Publish(音讯公布):
{
"ts": 1650609267000,
"topic": "webhook/msg/123",
"retain": false,
"qos": 0,
"action": "message_publish",
"from_username": "undefined",
"from_client_id": "nanomq-6ecb0b61",
"payload": "hello"
}
Disconnect(客户端连贯断开事件):
{
"reason": "normal",
"username": "undefined",
"clientid": "nanomq-6ecb0b61",
"action": "client_disconnected"
}
目前 NanoMQ 的 WebHook 零碎反对以下事件:
名称 | 阐明 | 执行机会 |
---|---|---|
client.connack | MQTT 客户端连贯胜利 | 服务端筹备下发连贯应答报文时 |
client.disconnected | MQTT 客户端连贯断开 | 客户端连贯层在筹备敞开时 |
message.publish | MQTT 音讯公布 | 服务端在公布(路由)音讯前 |
如须要更多的音讯事件请在 NanoMQ 我的项目的 Github 页面提交性能申请 Issue,咱们会第一工夫安顿减少。
须要强调的是,NanoMQ 的 WebHook 性能是全异步操作,所有的匹配到的事件音讯都会通过高效的外部 IPC 通道进入独立的专有线程进行解决,与 Broker 性能隔离,不会阻塞原有服务器里失常的音讯流转,十分高效牢靠。
对于 WebHook 具体的配置信息和形式,以及如何调优请期待之后的 NanoMQ 系列教程文章。
HTTP 连贯认证 API
HTTP 连贯认证是另一个罕用到的集成性能,可能不便地与第三方认证服务器集成实现客户端的连贯申请验证。另一个罕用开源我的项目 Mosquitto 的同类型插件曾经废除不再保护,NanoMQ 的此项性能则填补了这一空白,而且也放弃了和 EMQX 雷同的性能和配置格调,不便用户上手。
认证规定配置
Authentication HTTP API 接口的配置文件读取形式与 NanoMQ 的其余配置文件雷同。外部蕴含的配置项有:
## 是否开启 HTTP Auth 插件
## Value: true | false
auth.http.enable = true
## Auth 申请的指标 HTTP URL
auth.http.auth_req.url = http://127.0.0.1:80/mqtt/auth
## HTTP Auth Request 申请形式
## Value: post | get
auth.http.auth_req.method = post
## HTTP Request Headers for Auth Request
auth.http.auth_req.headers.content_type = application/x-www-form-urlencoded
## Parameters used to construct the request body or query string parameters
auth.http.auth_req.params = clientid=%c,username=%u,password=%P
配置实现后,NanoMQ 就会依据配置设置的申请格局将客户端 Connect 包的信息申请对应的 HTTP URL。并依据返回码判断是否容许客户端连贯胜利(Code 200 示意胜利)。更具体的配置形式请参阅官网配置文档 https://nanomq.io/docs/en/lat…。
其余性能优化及 Bug 修复
此外,NanoMQ 0.8.0 还有如下更新和优化:
- 更正客户端高低线工夫音讯中的工夫戳 timestamp 字段为 UNIX 规范工夫戳,之前为启动计时器。
- 批改了 NanoMQ 命令行工具的应用形式,去除了默认必须应用“start/stop”的限度。
- 减少 ZeroMQ 代理音讯网关的文档。
- 修复了桥接连贯被远端频繁敞开时导致的锁竞争问题。
- 修复了客户端大量公布音讯导致积压时,Sub 客户端忽然端口导致的数据竞争问题。
- 不再默认对遗愿音讯内容进行 UTF-8 查看,只当客户端要求是才进行。
- 修复了一个应用 Retain As Published 音讯时若音讯属性为空会导致解体的故障。
行将到来
NanoMQ 将于下个月正式公布规定引擎,以及纳入新的数据库作为边缘数据全量长久化选项。目前此性能处于 Demo 阶段,在最新的主分支已能够应用。用户能够自行编译装置应用,欢送尝鲜:https://github.com/emqx/nanomq/。
NanoSDK 将于下个月公布 MQTT over QUIC 的 RC 版本,这是业界首个基于 C 语言的残缺反对 MQTT 3.1.1 和 QUIC 性能的 MQTT SDK,敬请期待。
版权申明:本文为 EMQ 原创,转载请注明出处。
原文链接:https://www.emqx.com/zh/blog/nanomq-newsletter-202205