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