RocketMQ的broker在RocketMQ體系中是比較核心的一環,因此理解了broker就盡得RocketMQ80%的精髓。先從broker的啓動開始:spa
initialize作了哪些事情:線程
加載Topic配置(topicConfigManager);日誌
加載消費進度存儲(consumerOffsetManager);netty
加載訂閱組配置管理(subscriptionGroupManager);對象
初始化存儲層(DefaultMessageStore);ip
初始化通訊層(remotingServer和fastRemotingServer);rem
初始化線程池(sendMessageExecutor處理髮送消息線程池,pullMessageExecutor處理拉取消息線程池,adminBrokerExecutor處理管理Broker線程池,clientManageExecutor處理管理Client線程池);同步
將線程池(SendMessageProcessor,pullMessageProcessor,QueryMessageProcessor,ClientManageProcessor,EndTransactionProcessor,AdminBrokerProcessor)註冊到netty消息處理器當中(remotingServer和fastRemotingServer對象中)it
啓動相關執行任務(天天凌晨統計消息量的任務(brokerStats.record()),定時刷消費進度(consumerOffsetManager.persist()),)io
獲取NameServer地址或者開啓定時獲取NameServer地址任務;
若是是slave:開啓Slave定時從Master同步配置信息任務,若是是Master,開啓增長統計日誌任務;
start作了哪些事情:
啓動剛剛初始化的各個管理器(消息存儲啓動(DefaultMessageStore.start());通訊層啓動(remotingServer.start(),fastRemotingServer.start());brokerOuterAPI.start();pullRequestHoldService.start();啓動檢測全部客戶端鏈接(clientHousekeepingService.start());filterServerManager.start();filterServerManager.start();brokerStatsManager.start();brokerFastFailure.start())
啓動時,強制註冊:registerBrokerAll()
開啓定時把Broker註冊到NameServer的任務
以上分析很粗,後面慢慢細化