RocketMQ原理解析-namesrv

Namesrv名稱服務,是沒有狀態可集羣橫向擴展。

1.      每個broker啓動的時候會向namesrv註冊

2.      Producer發送消息的時候根據topic獲取路由到broker的信息

3.      Consumer根據topic到namesrv獲取topic的路由到broker的信息

 

一:Namesrv功能:

         接收broker的請求註冊broker路由信息(包括master和slave)

         接收client的請求根據某個topic獲取所有到broker的路由信息

 

二:Namesrv啓動流程:


 三: RouteInfoManager

路由信息RouteInfoManager類的管理

brokerName表示一組broker,如:一個叫brokerName=broker-a, 可能包括一個master跟它的多個slave

 

Map<brokerName, brokerData>

brokerData 由brokerName和它的broker ids和address

                   id表示是master還是slave

                   id= 0爲master  大於0爲slave

 

Map<topic, List<queueData>>

queueData由brokerName, 讀隊列數,寫隊列數,已經權限值

 

Map<clusterName,Set<brokerName>>  將broker按照集羣分組

 

Map<brokerAddr, BrokerLiveInfo> 

BrokerLiveInfo 代表一個活的broker鏈接由最後更新時間,一個鏈接channel,數據版本和Ha地址組成

Broker定時向namesrv註冊並更新BrokerLiveInfo的時間戳

 

四:Namesrv與broker間的心跳:

1.      Broker啓動的時候會啓動定時任務,每隔十秒鐘會向所有namesrv發送心跳請求,同時也是註冊topic信息到namesrv

2.      namesrv接收borker心跳DefaultRequestProcessor的REGISTER_BROKE事件處理,

(1)      註冊broker的topic信息

(2)      構建或者更新BrokerLiveInfo的時間戳

3.      NamesrvController初始化時啓動線程定時調用RouteInfoManger的scanNotActiveBroker方法來定時清理不活動的broker(默認兩分鐘沒有向namesrv發送心跳更新BrokerLiveInfo時間戳的),比較BrokerLiveInfo的時間戳,如果過期關閉channel連接

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章