NanoMQ Newsletter 2022-05|v0.8.0 釋出,新增 WebHook 擴充介面和連線認證 API

EMQX 發表於 2022-06-10

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.connackMQTT 客戶端連線成功服務端準備下發連線應答報文時
client.disconnectedMQTT 客戶端連線斷開客戶端連線層在準備關閉時
message.publishMQTT 訊息釋出服務端在釋出(路由)訊息前

如需要更多的訊息事件請在 NanoMQ 專案的 Github 頁面提交功能申請 Issue,我們會第一時間安排增加。

需要強調的是,NanoMQ 的 WebHook 功能是全非同步操作,所有的匹配到的事件訊息都會通過高效的內部 IPC 通道進入獨立的專有執行緒進行處理,與 Broker 功能隔離,不會阻塞原有伺服器里正常的訊息流轉,非常高效可靠。

NanoMQ WebHook

關於 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 還有如下更新和優化:

  1. 更正客戶端上下線時間訊息中的時間戳 timestamp 欄位為 UNIX 標準時間戳,之前為啟動計時器。
  2. 修改了 NanoMQ 命令列工具的使用方式,去除了預設必須使用 “start/stop” 的限制。
  3. 增加 ZeroMQ 代理訊息閘道器的文件。
  4. 修復了橋接連線被遠端頻繁關閉時導致的鎖競爭問題。
  5. 修復了客戶端大量釋出訊息導致積壓時,Sub 客戶端突然埠導致的資料競爭問題。
  6. 不再預設對遺願訊息內容進行 UTF-8 檢查,只當客戶端要求是才進行。
  7. 修復了一個使用 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