1. 程式人生 > >分散式訊息中介軟體 RocketMQ:概述與原始碼編譯篇

分散式訊息中介軟體 RocketMQ:概述與原始碼編譯篇

一、前言

Apache RocketMQ 是一個分散式訊息中介軟體,其具有低延遲、高效能和可靠性、萬億級容量、靈活的可擴充套件性特性;它是阿里巴巴在2012年開源的分散式訊息中介軟體,目前已經捐贈給 Apache 軟體基金會,並於2017年9月25日成為 Apache 的頂級專案。

二、RocketMQ架構

image.png 本圖來自rocketmq官網

RocketMQ 是一個分散式訊息中介軟體,其具有低延遲、高效能和可靠性、萬億級容量、靈活的可擴充套件性特性。它主要有四部分組成,分別為name servers, brokers, producers and consumers.每部分都可以進行水平擴充套件,而不會出現單點問題。

  • NameServer Cluster:名稱服務叢集,提供輕量級的服務發現與路由服務,每個名稱伺服器記錄了全部的broker的路由資訊,並且提供相應的讀寫服務,支援快速儲存擴充套件。
  • Broker Cluster:broker叢集,broker通過提供輕量級的主題和佇列機制來維護訊息儲存。它支援推和拉兩種模型,包含容錯機制(2個副本或3個副本),並提供了強大的平滑峰值,提供積累數以億計的訊息並保證其在原始時間順序的被消費能力。此外,broker也提供災難恢復、豐富的度量統計和警報機制,所有這些能力在傳統的訊息傳遞系統裡面都是沒有的。
  • Producer Cluster:生產者叢集,提供分散式部署,分散式的生產者傳送訊息到broker叢集,具體選擇哪一個broker機器是通過一定的負載均衡策略來決定的,傳送訊息中支援故障快速恢復,並且具有較低的等待時間
  • Consumer Cluster:消費者叢集,消費者在推和拉模型中支援分散式部署。它還支援叢集消費和訊息廣播。它提供了實時訊息訂閱機制,可以滿足大多數消費者的需求。

注:broker在啟動時候會去連結nameserver, 然後註冊topic資訊到NameServer,NameServer維護了所有topic的資訊和對應的broker路由資訊,broker與NameServer之間是有心跳檢查的,NameServer 發現broker掛了後,會從註冊資訊裡面刪除,這類似zookeeper實現的服務註冊;producer則需要配置nameserver的地址,然後定時從NameServer獲取對應topic的路由資訊(這個topic的訊息應該路由到那個broker),同時producer與NameServer,proudcer與broker有心跳檢查;同理Consumer需要配置NameServer的地址,然後定時從NameServer獲取對應topic的路由資訊(應該從那個broker的訊息佇列獲取訊息),同時Consumer與NameServer,Consumer與broker有心跳檢查。

三、Mac下RocketMq原始碼編譯與環境搭建

3.1 原始碼下載與編譯

  • 首先需要到https://github.com/apache/rocketmq 下載原始碼,本文使用了rocketmq-all-4.2.0 這個tag下的原始碼,原始碼目錄: image.png
  • 本文使用maven與JDK版本 image.png
  • 下載後在原始碼根目錄下執行 mvn -Prelease-all -DskipTests clean install -U,執行完畢後出出現下面結果: image.png

出現上面結果說明原始碼以及編譯OK了,然後在原始碼根目錄的distribution/target目錄會出現apache-rocketmq.tar.gz,如下圖 image.png

解壓apache-rocketmq.tar.gz資料夾,結果如下: image.png

image.png

image.png

最後


加多

加多

高階 Java 攻城獅 at 阿里巴巴加多,目前就職於阿里巴巴,熱衷併發程式設計、ClassLoader,Spring等開源框架,分散式RPC框架dubbo,springcloud等;愛好音樂,運動。微信公眾號:技術原始積累。知識星球賬號:技術原始積累