文章目錄
前言
本次博文就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社區版版本。
- hivemq-community-edition【基於Java的開源MQTT代理,完全支持MQTT 3.x和MQTT5】
- hivemq-mqtt-client【MQTT3.1.1和MQTT5都支持,實現極高的吞吐量和低內存消耗】
- mqtt-cli【命令行界面】
支持特性
- 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 的各種
跨語言客戶端和協議
-
在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的服務器中自動部署
-
使用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。
特徵
- 參考MQTT3.1.1規範實現
- 完整的QoS服務質量等級實現
- 遺囑消息, 保留消息及消息分發重試
- 心跳機制
- MQTT連接認證(可選擇是否開啓)
- SSL方式連接(可選擇是否開啓)
- 主題過濾(支持單主題訂閱如
test_topic
/mqtt/test
--不能以/結尾, 通配符訂閱#
/mqtt/#
--以#結尾) - Websocket支持(可選擇是否開啓)
- 集羣功能(可選擇是否開啓)
- Kafka消息轉發功能(可選擇是否開啓)
備註
主題有一些限制,不能以/結尾,不支持通配符訂閱+