BrokerStartup
BrokerStartup是Broker的启动类:
1.与NameServer启动时一样,会初始化相关配置参数,与NameServer不一样的地方是,Broker不仅会创建Netty Server的配置, 也会创建Netty Client的配置,因为Broker作为Client,需要向NameServer发送请求进行注册,同时Broker又需要作为Server接受Producer和Consumer的请求生产/消费消息;
2.Broker会从配置文件中获取NameServer的地址列表,后续向NameServer注册;
3.创建BrokerController,BrokerController是Broker的核心组件;
4.注册关闭时的钩子函数,在关闭前处理资源的关闭。
1 | public class BrokerStartup { |
BrokerController
BrokerController是Broker的核心组件,包含了一些核心的功能组件和线程池,管理Broker的请求处理、后台线程和磁盘数据。
初始化
1.从磁盘上加载一些相关配置,如Topic配置、Consumer的Offset等数据;
2.创建消息管理组件DefaultMessageStore,如果开启了Dleger,初始化DLeger相关配置;
3.创建Netty Server服务器;
4.创建了一系列的线程池,用来定时调度后台任务,如处理消息拉取的任务、处理发送消息的任务;
5.处理NameServer地址列表;
6.一些其他的操作,暂时先不管。
1 | public boolean initialize() throws CloneNotSupportedException { |
启动
1.start方法中启动了一系列的组件,比较核心的是Netty Server服务器的启动和BrokerOuterAPI的启动。Netty启动之后就可以接收网络请求,BrokerOuterAPI处理一些核心的功能,比如通过Netty Client向外发送请求;
2.向NameServer注册;
1 | public void start() throws Exception { |
服务注册
在注册的代码中会判断是否需要注册,如果需要注册,将会通过brokerOuterAPI核心组件发送请求到NameServer进行注册,Broker会把自己注册给所有的NameServer,然后对注册的结果进行处理。
1 | public synchronized void registerBrokerAll(final boolean checkOrderConfig, boolean oneway, boolean forceRegister) { |
总结
Broker的启动过程简单总结:
1.初始化相关配置参数,包括Broker的配置、Netty Client、Netty Server的配置等;
2.创建核心组件BrokerController,初始化了一系列的组件,并创建Netty Server和一系列的后台任务线程池,Netty Server用来接收网络请求,线程池用来调度各种任务;
3.启动BrokerController中的一系列的组件,并通过BrokerOuterAPI向NameServer注册;
注:图片来自于儒猿技术窝-从 0 开始带你成为消息中间件实战高手
参考
儒猿技术窝:从 0 开始带你成为消息中间件实战高手