源博客地址:http://blog.csdn.net/pipinet123
MQTT交流群:221405150
面向群體
- 想自己實現MQTT Broker的朋友
- 對現有開源的MQTT Broker或多或少有些不愜意的朋友
簡介
HiveMQ是企業級MQTT Broker,提供高性能、高可用、高擴展、高安全性的企業級服務。
它是純Java實現的。
基於它如上的描寫敘述。所以興許我們就是基於它的高性能、高可用、高擴展、高安全性這幾個特點來分析它的源代碼。
注意:本篇源代碼都是基於HiveMQ 3.1.2版本號源代碼解說。
拓撲圖
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混淆過的源代碼反編譯了
