1. 程式人生 > >小白初識emqx消息服務器

小白初識emqx消息服務器

消息傳遞 大小 斷開連接 last 級別 底層 保留 mon etc

作為小白開始學習emqx,沒有邏輯一臉懵,所以就把平時困惑的一些問題羅列如下:

EMQ X R3.0 (Erlang/Enterprise/Elastic MQTT Broker) 是基於 Erlang/OTP 語言平臺開發,支持大規模連接和分布式集群,發布訂閱模式的開源 MQTT 消息服務器。

MQTT是什麽

MQTT是一個由IBM主導開發的物聯網傳輸協議,它被設計用於輕量級的發布/訂閱式消息傳輸,旨在為低帶寬和不穩定的網絡環境中的物聯網設備提供可靠的網絡服務。它的核心設計思想是開源、可靠、輕巧、簡單,具有以下主要的幾項特性:

  1. 非常小的通信開銷(最小的消息大小為 2 字節);
  2. 支持各種流行編程語言(包括C,Java,Ruby,Python 等等)且易於使用的客戶端;
  3. 支持發布 / 預定模型,簡化應用程序的開發;
  4. 提供三種不同消息傳遞等級,讓消息能按需到達目的地,適應在不穩定工作的網絡傳輸需求。

emqx提供了三種消息發布服務質量

(1)? "至多一次",消息發布完全依賴底層TCP/IP 網絡,會發生消息丟失或者重復,這一級別可用於如下情況,環境,傳感器數據,丟失一次度記錄無所謂,因為不久之後會有第二次發送

(2)"至少一次" 確保消息到達,但消息重復可能發生

(3)? “只有一次",確保消息到達一次,這一級別可用於如下情況,在計費系統中,消息重復或者丟失導致不正確的結果

EMQ離線消息

(1) 保留消息 MQTT客戶端向服務器發布(PUBLISH)消息時,可以設置保留消息(Retained Message)標誌。保留消息(Retained Message)會駐留在消息服務器,後來的訂閱者訂閱主題時仍可以接收該消息。 例如mosquitto命令行發布一條保留消息到主題’a/b/c’: mosquitto_pub -r -q 1 -t a/b/c -m ‘hello‘ 之後連接上來的MQTT客戶端訂閱主題’a/b/c’時候,仍可收到該消息: $ mosquitto_sub -t a/b/c -q 1 hello 保留消息(Retained Message)有兩種清除方式: 客戶端向有保留消息的主題發布一個空消息: mosquitto_pub -r -q 1 -t a/b/c -m ‘‘ 消息服務器設置保留消息的超期時間。

(2) cleanSession 清理回話 MQTT客戶端向服務器發起CONNECT請求時,可以通過’Clean Session’標誌設置會話。 ‘Clean Session’設置為0,表示創建一個持久會話,在客戶端斷開連接時,會話仍然保持並保存離線消息,直到會話超時註銷。 ‘Clean Session’設置為1,表示創建一個新的臨時會話,在客戶端斷開時,會話自動銷毀。

ACL鑒權

實際場景,我們需要監聽每一臺設備的鏈接和斷開事件等EMQ的系統行為,這樣的事件當然不是任何一個連接到服務器的終端,這樣的限制就是ACL鑒權,官方也提供了默認的鑒權,在 /usr/local/emqttd/etc/acl.conf 下,默認值允許127.0.0.1的IP地址鏈接監聽系統主題。

官方提供如下方式來進行用戶和ACL驗證的存儲:

  • 配置文件和命令
  • LDAP
  • HTTP
  • MySQL
  • Postgre
  • Redis
  • MongoDB

可以采用大家經常用到的MYSQL作為鑒權的數據來源,首先先關閉匿名認證(默認是開啟的誰都能夠登錄)

小白初識emqx消息服務器