RocketMQ探索-namesrv
- Namesrv:無狀態,可集羣部署,橫向擴展
- 每一個broker(包括master和slave)在啓動的時候向namesrv註冊本身
- Producer發送消息的時候根據topic從namesrv中獲取路由到broker的信息(根據namesrv的註冊信息)
- Consumer根據topic到namesrv獲取topic的路由到broker的信息
Namesrv流程圖:jvm
![](http://static.javashuo.com/static/loading.gif)
namesrv啓動時作了哪些事情:函數
- 加載Netty的server的配置項(NettyServerConfig),namesrv使用Netty與其餘模塊進行通訊,好比和broker模塊進行通訊。
- 設置監聽端口:9876
- 初始化服務控制對象NamesrvController。NamesrvController實例中包含:namesrvConfig(namesrv相關配置),nettyServerConfig(netty的相關配置),KVConfigManager(KV配置管理),RouteInfoManager(路由信息、topic信息管理),BrokerHousekeepingService(broker管理服務)
- NamesrvController.initialize():加載KV配置;初始化通訊層(Netty的初始化:remotingServer對象);初始化線程池(remotingExecutor);定義RequestCode用來做爲netty的通訊協議字段(registerProcessor():向remotingServer對象中註冊DefaultRequestProcessor(namesrv中處理請求的類)對象);啓動定時掃描notActive的broker任務;啓動定時將configTable相關信息記錄到日誌文件中任務
- 設置一個jvm退出勾子函數,即jvm退出時,此處線程調用controller.shutdown(),清理controller相關資源
歡迎關注本站公眾號,獲取更多信息