天天看點

RocketMQ原了解析-NameServer

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連接配接      

熬夜不易,點選請老王喝杯烈酒!!!!!!!