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的任务
以上分析很粗,后面慢慢细化