源博客地址:http://blog.csdn.net/pipinet123安全
MQTT交流羣:221405150
面向羣體
- 想本身實現MQTT Broker的朋友
- 對現有開源的MQTT Broker或多或少有些不愜意的朋友
簡介
HiveMQ是企業級MQTT Broker,提供高性能、高可用、高擴展、高安全性的企業級服務。restful
它是純Java實現的。markdown
官網地址:http://www.hivemq.com網絡
基於它如上的描寫敘述。因此興許咱們就是基於它的高性能、高可用、高擴展、高安全性這幾個特色來分析它的源代碼。架構
注意:本篇源代碼都是基於HiveMQ 3.1.2版本號源代碼解說。app
拓撲圖
Single
- 多個client直接與Broker鏈接。
Cluster
- 多個client與Load Balancer鏈接,由Load Balancer作負載均衡,將鏈接分發到各個Broker。
- 多個Broker組成Cluster,由JGroup進行集羣通信。
- 多個Broker由一致性hash環虛節點,進行集羣中數據的主主備份,以達到高可用。
- HiveMQ提供多種集羣Discovery來達到不一樣組網場景中的集羣發現。
架構圖
- Handlers由實現Netty ChannelHandlerAdapter。處理SSL;處理MQTT協議的codec;處理監控數據收集;處理流量限制;擴展點回調觸發等client長連接。
- SPI是HiveMQ擴展出來爲作HiveMQ Broker端二次開發,提供各類Callback、 Cache、Scheduler、Authentication、Authorization、Configuration等等擴展點;還提供了各類異步/同步的接口Service。
以便開發者基於HiveMQ開發屬於本身的業務;負載均衡
- Plugins是基於SPI提供出來的擴展點。依照HiveMQ的Plugin開發要求,註冊屬於客戶本身的Plugin,HiveMQ官方也給咱們提供出來了一些基礎插件及各類插件的演示樣例。
- ClusterServices是處理集羣鏈接、數據備份、數據交換、節點狀態、一致性has虛擬節點等處理的一堆Service
- Persistences是處理消息的存儲、Cluster節點間的數據存儲/同步。
- LocalPersistences是處理消息在當前節點的信息存儲。
開源框架使用
- 使用Guice作DI
- 使用Netty 4作網絡框架
- 使用JGroups作Cluster Node之間的集羣通信
- 使用Exodus作Broker信息文件持久化存儲
- 使用Dropwizard Metrics作Broker的統計、監控
- 使用Kryo作序列化/反序列化
- 使用Jetty作Broker端servlet容器
- 使用Resteasy作Broker端restfull框架
- 使用Quartz/作Broker端任務的調度
其它另外一些使用的框架不一一列舉
Why?
爲何研究MQTT Broker
- 想本身實現手機app推送
- MQTT協議輕量/QoS保證
爲何選擇HiveMQ
- 它支持Plugin開發
- 它支持Cluster
- 它的代碼至關嚴謹,包含性能考慮/內存考慮
源代碼從哪來的?
- 博主花了一年的業餘時間,將hivemq混淆過的源代碼反編譯了