(點選上方公眾號,可快速關註)
來源:謝晞鳴 ,
fdx321.github.io/2017/08/16/【RocketMQ原始碼學習】1-總體架構/
1.為什麼是RocketMQ
為什麼是 RocketMQ,而不是 ActiveMQ/RabbitMQ/Kafka 呢?這不是技術選型,我只是想找一個業界比較好的、開源的 MQ 系統,學習一下 MQ 的工作原理。所以首選 Java 的(雖然語言對我來說不是問題,然還是有點學習成本的),這就只剩下 RocketMQ 和 ActiveMQ 了,這兩個那就肯定 選RocketMQ 了,畢竟人家是這麼吹牛逼的: “萬億級資料洪峰下的分散式訊息引擎”。
2.專案結構
-
benchmark, 一些 sh 指令碼,呼叫 example 模組中的 benchmark Producer/Consumer 來做一些測試
-
broker, 訊息代理,起到串聯 Producer/Consumer 和 Store 的作用
-
client,包含 Producer 和 Consumer,負責訊息的發和收
-
common,一些公共程式碼,供其他模組依賴
-
distribution, 一些 sh 指令碼和 配置,主要是在部署的時候用的
-
example,使用樣例,包括各種使用方法,Pull樣式、Push樣式、廣播樣式、有序訊息、事務訊息等等
-
filter,過濾器,用於服務端 SQL92 的過濾方式
-
filtersrv, 過濾器 server, 用於消費端過濾,主要負責動態的載入和實體化過濾器
-
logappender,日誌相關
-
namesrv,可以理解成註冊中心,每個 broker 都會在這裡註冊,client 也會從這裡獲取 broker 的相關資訊
-
openmessaging, 講真,還沒去瞭解,應該是類似於 opentracing 這種,按照一套標準(或者叫API),封裝了一下RocketMQ原來的介面,讓其可以通用一點。我猜的!
-
remoting,基於 Netty 實現的網路通訊模組,包括 Server 和 Client, client、broker、filtersrv 等模組對它都有依賴
-
srvutil, 裡面只有兩個類,一個是來處理命令列的,一個是來配置 shutdownHook 的
-
store,負責訊息的儲存和讀取
-
style,程式碼模板,為了統一程式碼風格
-
test, 測試用例
-
tools, 一些工具類,基於它們可以寫一些 sh 工具來管理、檢視MQ系統的一些資訊
3.我的重點關註
這麼多模組,我並不是每一個都一行行程式碼的去讀,像 distribution、test、tools 這些我就大概掃了一眼。那麼哪些是我重點關註的呢?主要是 broker、client、common、namesrv、store、remoting,這幾個是核心模組,值得認真研讀,其它模組不要它們也能跑起來。
4.RocketMQ邏輯部署結構
這是 RocketMQ 的邏輯部署結構(參考《RocketMQ原理簡介 v3.1.1》),包括 producer/broker/namesrv/consumer 四大部分。namesrv 起到註冊中心的作用,部署的時候會用到 rocketmq-namesrv/rocketmq-common/rocketmq-remoting 三個模組的程式碼;broker 部署的時候會用到 rocketmq-broker/rocketmq-store/rocketmq-common/rocketmq-remoting 四個模組的程式碼;producer 和 consumer 會用到 rocketmq-client/rocketmq-common/rocketmq-remoting 三個模組的程式碼,這裡雖然將它們分開畫了,但實際上一個應用往往既是producer又是consumer。
Consumer 和 Broker 之間其實還可以加一個 filtersrv,用來做消費端的訊息過濾。
這裡面還有幾個概念:
-
Producer Group, 一類 Producer 的集合的名稱
-
Consumer Group, 一類 Consumer 的集合的名稱
-
Topic, 訊息的主題,用來標識一類訊息,還有 Tag 可以用來區分一個 Topic 下的多種訊息。
Producer Group、Consumer Group 和 Topic 之間並沒有強制的某種關係,一個 Producer Group 可以發多個 Topic 的訊息,一個 Consumer Group 也可以消費多個 Topic 的訊息。一個Consumer Group 可以消費來自多個 Producer Group的訊息,一個 Producer Group 的訊息也可以被多個 Consumer Group 消費。
Reference
-
RocketMQ 原理簡介
http://alibaba.github.io/RocketMQ-docs/document/design/RocketMQ_design.pdf
-
分散式開放訊息系統(RocketMQ)的原理與實踐
http://www.jianshu.com/p/453c6e7ff81c
看完本文有收穫?請轉發分享給更多人
關註「ImportNew」,提升Java技能