rocketmq的文章在網絡上有大量的文章分析,而且分析的非常不錯。本人此處發表rocket文章只是學習過程中的心得體會,可能分析不是很準確,希望有緣人指出其中問題,日後改正!
rocketmq總體架構
從上圖中可以看出,rocketmq主要分爲四大部分,分別爲nameserver,broker,produer,consumer。其中每一個部分都可以集羣部署。
- nameServer集羣:獨立部署,互相不受影響,主要是保存了broker註冊的相關信息,與其他三個集羣之間採用長連接通訊。其中一臺宕機,不影響其他的機器。
- broker集羣:rocketmq中消息的存儲與轉發服務器,主要有多個master-slave模式,雙master部署模式,單個master模式。消息在每一個master中都是同樣的存儲,集羣內部master與slave之間的有同步,異步通訊方式。
- producer集羣:產生消息的集羣,可以是單個應用也可以是集羣。通過長連接向nameServer集羣獲取topic列表,向broker集羣進行發送消息。producer與master建立長連接。
- consumer集羣:消費消息的集羣,可以是單個應用也可以集羣。消費消息方式主要有廣播和集羣兩種模式。consumer通過長連接向nameserver集羣獲取topic列表,然後從broker集羣中消費消息。consumer與broker集羣中的master和slave都建立長連接,這個與producer不同。
rocketmq邏輯架構
rocketmq邏輯圖中顯示,生產者producer與消費者consumer通過broker集羣來進行消息的轉發與存儲。其中topicA,B,C,D在rocketmq中是消息的分類。
- Topic:一個topic代表一類消息,通常指一個應用的消息對應一個Topic。生產者可以自己發送消息時告訴broker創建集羣(開發環境可以),也可以通過命令在broker集羣中創建好(生產環境推薦)。broker將topic信息註冊到nameserver集羣中。
- tags:消息標籤,在同一個topic中,可以通過tags進行消息分類或過濾。
NameServer集羣
- nameServer集羣沒有名稱,可以橫向擴展,集羣內部各個機器沒有任何通訊
- broker集羣中的每個節點啓動時,都會通過長連接向nameServer集羣中註冊信息(主要是topic路由信息)
- producer發送消息時,通過長連接向nameServer獲取topic路由信息,從而實現與broker中master通訊。
- consumer消費消息時,通過長連接向nameServer獲取topic路由信息,達到consumer與master,slave通訊。
5.nameServer中保存的路由信息都保存在內存中,宕機之後,消息丟失。rocketmq主要是通過RouteInfoManager類管理。
圖中就是通過mqadmin命令查看的topicTestA路由信息