MQTT---HiveMQ源代碼具體解釋(一)概覽

源博客地址: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

Single

  • 多個client直接與Broker鏈接。

Cluster

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混淆過的源代碼反編譯了
相關文章
相關標籤/搜索