面向群體
- 想自己實現(xiàn)MQTT Broker的朋友
- 對現(xiàn)有開源的MQTT Broker或多或少有些不滿意的朋友
簡單介紹
HiveMQ是企業(yè)級MQTT Broker,提供高性能、高可用、高擴(kuò)展、高安全性的企業(yè)級服務(wù)。
它是純Java實現(xiàn)的。
官網(wǎng)地址:http://www.hivemq.com
基于它如上的描述,所以后續(xù)我們就是基于它的高性能、高可用、高擴(kuò)展、高安全性這幾個特點來分析它的源碼。
注意:本篇源碼都是基于HiveMQ 3.1.2版本源碼講解。
拓?fù)鋱D
Single
Single
- 多個客戶端直接與Broker連接。
Cluster
Cluster
- 多個客戶端與Load Balancer連接,由Load Balancer做負(fù)載均衡,將連接分發(fā)到各個Broker。
- 多個Broker組成Cluster,由JGroup進(jìn)行集群通訊。
- 多個Broker由一致性hash環(huán)虛節(jié)點,進(jìn)行集群中數(shù)據(jù)的主主備份,以達(dá)到高可用。
- HiveMQ提供多種集群Discovery來達(dá)到不同組網(wǎng)場景中的集群發(fā)現(xiàn)。
架構(gòu)圖
這里寫圖片描述
- Handlers由實現(xiàn)Netty ChannelHandlerAdapter。處理SSL;處理MQTT協(xié)議的codec;處理監(jiān)控數(shù)據(jù)收集;處理流量限制;擴(kuò)展點回調(diào)觸發(fā)等客戶端長鏈接。
- SPI是HiveMQ擴(kuò)展出來為做HiveMQ Broker端二次開發(fā),提供各種Callback、 Cache、Scheduler、Authentication、Authorization、Configuration等等擴(kuò)展點;還提供了各種異步/同步的接口Service。以便開發(fā)人員基于HiveMQ開發(fā)屬于自己的業(yè)務(wù);
- Plugins是基于SPI提供出來的擴(kuò)展點,按照HiveMQ的Plugin開發(fā)要求,注冊屬于客戶自己的Plugin,HiveMQ官方也給我們提供出來了一些基礎(chǔ)插件及各種插件的示例。
- ClusterServices是處理集群連接、數(shù)據(jù)備份、數(shù)據(jù)交換、節(jié)點狀態(tài)、一致性has虛擬節(jié)點等處理的一堆Service
- Persistences是處理消息的存儲、Cluster節(jié)點間的數(shù)據(jù)存儲/同步。
- LocalPersistences是處理消息在當(dāng)前節(jié)點的信息存儲。
開源框架使用
- 使用Guice做DI
- 使用Netty 4做網(wǎng)絡(luò)框架
- 使用JGroups做Cluster Node之間的集群通訊
- 使用Exodus做Broker信息文件持久化存儲
- 使用Dropwizard Metrics做Broker的統(tǒng)計、監(jiān)控
- 使用Kryo做序列化/反序列化
- 使用Jetty做Broker端servlet容器
- 使用Resteasy做Broker端restfull框架
-
使用Quartz/做Broker端任務(wù)的調(diào)度
其他還有一些使用的框架不一一列舉
Why?
為什么研究MQTT Broker
- 想自己實現(xiàn)手機(jī)app推送
- MQTT協(xié)議輕量/QoS保證
為什么選擇HiveMQ
- 它支持Plugin開發(fā)
- 它支持Cluster
- 它的代碼相當(dāng)嚴(yán)謹(jǐn),包括性能考慮/內(nèi)存考慮
源碼從哪來的?
- 博主花了一年的業(yè)余時間,將hivemq混淆過的源碼反編譯了