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


源博客地址:http://blog.csdn.net/pipinet123


MQTT交流群:221405150


面向群體

  • 想自己實現MQTT Broker的朋友
  • 對現有開源的MQTT Broker或多或少有些不愜意的朋友

簡介

HiveMQ是企業級MQTT Broker,提供高性能、高可用、高擴展、高安全性的企業級服務。

它是純Java實現的。

官網地址:http://www.hivemq.com

基於它如上的描寫敘述。所以興許我們就是基於它的高性能、高可用、高擴展、高安全性這幾個特點來分析它的源代碼。

注意:本篇源代碼都是基於HiveMQ 3.1.2版本號源代碼解說。

拓撲圖

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混淆過的源代碼反編譯了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM