分散式訊息中介軟體 RocketMQ:概述與原始碼編譯篇
一、前言
Apache RocketMQ 是一個分散式訊息中介軟體,其具有低延遲、高效能和可靠性、萬億級容量、靈活的可擴充套件性特性;它是阿里巴巴在2012年開源的分散式訊息中介軟體,目前已經捐贈給 Apache 軟體基金會,並於2017年9月25日成為 Apache 的頂級專案。
二、RocketMQ架構
本圖來自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下的原始碼,原始碼目錄:
- 本文使用maven與JDK版本
- 下載後在原始碼根目錄下執行 mvn -Prelease-all -DskipTests clean install -U,執行完畢後出出現下面結果:
出現上面結果說明原始碼以及編譯OK了,然後在原始碼根目錄的distribution/target目錄會出現apache-rocketmq.tar.gz,如下圖
解壓apache-rocketmq.tar.gz資料夾,結果如下:
最後
- rocketmq環境搭建 rocketmq環境搭建單擊我
- dubbo 想系統學dubbo的單擊我
- Java併發 想學併發的童鞋可以 單擊我
- spring事務 本地事務諮詢可以單擊我
- 分散式事務諮詢可以單擊我