物聯網之MQTT3.1.1和MQTT5協議 (20) MQTT 相關開源實現Server或Broker列表(會不斷更新)

前言

本次博文就MQTT實現進行描述,後續會陸續更新相關內容。

broker列表

整體比較(MQTT 官網提供)

Server QoS 0 QoS 1 QoS 2 auth bridge $SYS SSL dynamic topics cluster websockets plugin system
2lemetry §
Jmqtt § § §
Apache ActiveMQ
Apache ActiveMQ Artemis
Bevywise IoT Platform rm
emitter §
emqttd
flespi
GnatMQ
HBMQTT
HiveMQ
IBM WIoTP Message Gateway
JoramMQ
Mongoose ? ? ? ? ? ? ? ? ?
moquette ? ? ? rm
mosca ? ? ? ?
mosquitto §
MQTT.js §
MqttWk ?
RabbitMQ ? ? ?
RSMB ?
Software AG Universal Messaging rm
Solace §
SwiftMQ
Trafero Tstack
VerneMQ
WebSphere MQ ? ? ?
Broker 開源 語言 連接方式 QoS 共享訂閱 持久化 集羣
mosquitto C/C++ 4種 全部
hui6075/mosquitto C/C++ 4種 全部
moquette0.10 Java 4種 全部
moquette0.12 Java 4種 全部 §
EMQ2.0+ Erlang 4種 全部
EMQ3.0+ Erlang 4種 全部
EMQ PLUS Erlang 4種 全部
Jmqtt1.1.0 Java 無SSL 全部
MqttWk Java 4種 全部 § §
HiveMQ Java 4種 全部
  • ✔ - 支持
  • ✘ - 不支持
  • ? - 不瞭解
  • § - 支持但做得不好(有限制)

HiveMQ

在這裏插入圖片描述

HiveMQ是企業級的Broker,用Java編寫,功能齊全,存在Github社區版版本。

支持特性

  • MQTT 3.1 / 3.1.1 / 5.0
  • 完整QoS支持
  • 分佈式集羣支持
  • 持久化支持
  • 流量控制支持
  • 完整連接方式支持
  • IPv6支持
  • 集羣共享訂閱
  • $SYS統計信息主題
  • JMX性能監控
  • 日誌打印
  • Docker部署
  • ……

說明

  • 集羣是基於Jgroups的,持久化的數據都是本地+Jgroups同步
  • 訂閱樹也是完整的訂閱樹,優秀的緩存和併發訪問控制,集羣進行數據同步
  • 多線程和併發等用的google的guava進行防禦性編程

相關資料

ActiveMQ

在這裏插入圖片描述

Apache許可證下開源項目,官網地址

支持特性

  • 支持Java,C,C ++,C#,Ruby,Perl,Python,PHP 的各種

    跨語言客戶端和協議

    • 適用於Java,C,C ++,C#的高性能客戶端的OpenWire
    • Stomp支持,因此可以輕鬆地用C,Ruby,Perl,Python,PHP,ActionScript / Flash,Smalltalk和ActiveMQ以及任何其他流行的Message Broker進行對話來編寫客戶端
    • AMQP v1.0支持
    • MQTT v3.1支持允許在IoT環境中進行連接。
  • 在JMS客戶端和Message Broker中完全支持企業集成模式

  • 支持許多高級功能,例如消息組虛擬目標通配符組合目標

  • 完全支持JMS 1.1和J2EE 1.4,並支持瞬時,持久性,事務性和XA消息傳遞

  • Spring支持,因此ActiveMQ可以輕鬆地嵌入到Spring應用程序中,並使用Spring的XML配置機制進行配置

  • 在流行的J2EE服務器(例如TomEE,Geronimo,JBoss,GlassFish和WebLogic)中進行了測試

    • 包括用於入站和出站消息傳遞的JCA 1.5資源適配器,以便ActiveMQ應該在任何符合J2EE 1.4的服務器中自動部署
  • 支持可插拔的傳輸協議,例如VM,TCP,SSL,NIO,UDP,多播,JGroups和JXTA傳輸

  • 使用JDBC和高性能日誌支持非常快速的持久性

  • 專爲高性能集羣,客戶端-服務器,基於對等的通信而設計

  • REST API可爲消息傳遞提供與技術無關和語言無關的基於Web的API

  • Ajax支持使用純DHTML對Web瀏覽器的Web流支持,從而允許Web瀏覽器成爲消息傳遞結構的一部分

  • CXF和Axis支持,因此ActiveMQ可以輕鬆地放入這兩個Web服務堆棧中,以提供可靠的消息傳遞

  • 可用作內存JMS提供程序,非常適合單元測試JMS

相關資料

ActiveMQ Artemis

ActiveMQ的“下一代”,是支持MQTT的多協議消息代理。下一代高性能,非阻塞架構,基於事件驅動的消息系統。

支持特性

  • 提供實現JMS 1.1 & 2.0 的客戶端,包含JNDI
  • 通過共享存儲和網絡複製提供高可用
  • 簡單&強大的協議無感知的尋址模型(addressing model)
  • 靈活的集羣用於分佈式負載
  • 基於日誌的低延遲持久化
  • 方便從ActiveMQ 5遷移

相關資料

RabbitMQ

RabbitMQ是AMQP消息代理,帶有MQTT插件(從3.x版開始捆綁銷售)。也可以使用公共測試服務器。功能受限。

Mosquitto

開源MQTT Server,可惜是C和C++的開源庫。

Eclipse Mosquitto是實現MQTT協議版本5.0、3.1.1和3.1的開源消息代理(經EPL / EDL許可)。Mosquitto輕巧,適合在從低功耗單板計算機到完整服務器的所有設備上使用。

MQTT協議提供了使用發佈/訂閱模型執行消息傳遞的輕量級方法。這使其適用於物聯網消息傳遞(例如,低功率傳感器)或移動設備(例如電話,嵌入式計算機或微控制器)。

flespi

flespi是一項公開的,免費的,基於雲的MQTT代理服務,具有聲明的3.1、3.1.1、5.0協議合規性。高容量目標架構,隔離的MQTT名稱空間,WebSockets / SSL支持,可配置的ACL,商業和免費的SLA,由HTTP REST API管理。

可惜是Node.js,python和Lua語言的開源

Mosca

非java,官網

VerneMQ

VerneMQ是高性能的分佈式MQTT消息代理。它在商品硬件上水平和垂直擴展,以支持大量併發發佈者和使用者,同時保持較低的延遲和容錯能力。VerneMQ是用於IoT平臺或智能產品的可靠消息中心。

VerneMQ實現了MQTT 3.1、3.1.1和5.0規範。

支持特性

  • QoS 0,QoS 1,QoS 2
  • 基本認證和授權
  • 橋樑支撐
  • $ SYS監視和報告樹
  • TLS(SSL)加密
  • Websockets支持
  • 集羣支持
  • 日誌記錄(控制檯,文件,系統日誌)
  • 向石墨報告
  • 可擴展的插件架構
  • 每個ClientId多個會話
  • 會話平衡
  • 共享訂閱
  • 消息負載調整
  • 郵件減載(用於系統保護)
  • 脫機消息存儲(基於LevelDB)
  • 隊列可以處理消息FIFO或LIFO樣式。
  • MongoDB身份驗證和集成
  • Redis身份驗證和集成
  • MySQL身份驗證和集成
  • PostgreSQL身份驗證和集成
  • Memcached整合
  • HTTP整合
  • HTTP Webhooks
  • 代理協議v2
  • 管理HTTP API(BETA)
  • 實時MQTT會話跟蹤
  • 完全多租戶
  • 羣集狀態網頁

相關資料

emqx

EMQ X是一個完全完全開放的平臺,高度可擴展,高可用的分佈式MQTT消息服務器,適用於IoT,M2M和移動應用程序,可處理千萬等級的併發客戶端。

從3.0版本開始,EMQ X完全支持MQTT V5.0協議規範,向下兼容MQTT V3.1和V3.1.1,並支持MQTT-SN,CoAP,LwM2M,WebSocket和STOMP等通信協議。EMQX 3.0單價可支持千萬等級的MQTT併發連接。

相關資料

vertx-mqtt-broker

開源項目。

支持特性

  • MQTT v3.1和v3.1.1支持
  • 支持QoS 0、1和2消息
  • 持久性和會話管理(cleanSession = false)
  • 可插拔身份驗證(通過vert.x verticle系統)
    • OAuth 2.0和OpenID Connect 1.0身份驗證
    • JWT認證
  • 多租戶
  • 通過WebSocket的MQTT
  • 保留標誌
  • 通過TCP和Websocket的TLS支持
  • 同一代理引擎中的多個tcp / websocket傳輸
  • 經紀人到經紀人雙向和橋接

相關資料

moquette

輕量級MQTT代理,官網在此

相關資料

Jmqtt

由Java和Netty實現的MQTT代理,支持持久性和集羣

支持特性

  • 基於Java及Netty開發,插件化模式,高性能,高擴展性
  • 支持mqtt協議qos0,qos1,qos2消息質量服務
  • 支持mqtt協議cleansession,retain,will等消息服務
  • 完整支持mqtt Topic匹配過濾
  • 支持websocket協議
  • 支持RocksDB進行數據本地存儲,數據高可靠

相關資料

MqttWk

基於nutzboot+netty+redis+kafka的Java MQTT broker。

特徵

  1. 參考MQTT3.1.1規範實現
  2. 完整的QoS服務質量等級實現
  3. 遺囑消息, 保留消息及消息分發重試
  4. 心跳機制
  5. MQTT連接認證(可選擇是否開啓)
  6. SSL方式連接(可選擇是否開啓)
  7. 主題過濾(支持單主題訂閱如 test_topic /mqtt/test --不能以/結尾, 通配符訂閱 # /mqtt/# --以#結尾)
  8. Websocket支持(可選擇是否開啓)
  9. 集羣功能(可選擇是否開啓)
  10. Kafka消息轉發功能(可選擇是否開啓)

備註

主題有一些限制,不能以/結尾,不支持通配符訂閱+

相關資料

參考文獻

MQTT協議5.0規範

MQTT協議3.1.1規範
MQTT Broker的需求和各大Broker對比

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章