1.前言
此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂《从0开始带你成为RocketMQ高手》,我本人觉得这个作者还是不错,都是从场景来进行分析,感觉还是挺适合我这种小白的。这块主要都是我自己的学习笔记。想看原版的,还是去儒猿课堂。
这篇文章紧挨着上一篇文章rocketMq源码分析之搭建本地环境-优快云博客
2.Broker启动入口
Broker的启动入口为BrokerStartup,下面的代码为BrokerStartup的main方法,从代码上看跟NameServer启动时候很像。创建了一个BrokerController,并将BrokerController进行启动。
public static void main(String[] args) {
start(createBrokerController(args));
}
public static BrokerController start(BrokerController controller) {
try {
controller.start();
String tip = "The broker[" + controller.getBrokerConfig().getBrokerName() + ", "
+ controller.getBrokerAddr() + "] boot success. serializeType=" + RemotingCommand.getSerializeTypeConfigInThisServer();
if (null != controller.getBrokerConfig().getNamesrvAddr()) {
tip += " and name server is " + controller.getBrokerConfig().getNamesrvAddr();
}
log.info(tip);
System.out.printf("%s%n", tip);
return controller;
} catch (Throwable e) {
e.printStackTrace();
System.exit(-1);
}
return null;
}
2.1 BrokerController初始化的操作
BrokerController进行初始化的时候,跟NamesrvController进行初始化的流程很像,都会进行配置文件参数的解析,但是里面有一些不同的配置
/**
* nettyServer的配置类
*/
final NettyServerConfig nettyServerConfig = new NettyServerConfig();
/**
* nettyClient的配置类
*/
final NettyClientConfig nettyClientConfig = new NettyClientConfig();
//netty的客户端使用了TLS
nettyClientConfig.setUseTLS(Boolean.parseBoolean(System.getProperty(TLS_ENABLE,
String.valueOf(TlsSystemConfig.tlsMode == TlsMode.ENFORCING))));
//设置nettyServer监听的端口号
nettyServerConfig.setListenPort(10911);
/**
* 消息存储的配置
*/
final MessageStoreConfig messageStoreConfig = new MessageStoreConfig();
这块有一个点就是这个Broker在跟NameServer进行通信的时候,它就是NettyClient,当咱们的生产者进行发送消息的时候,那么这个Broker就是NettyServer,用来接收生产者的消息。紧接着下面的代码就是解析配置相关的信息,并向这四个配置文件中进行设置配置相关信息。这里就不粘贴出来进行分析了。
2.2 BrokerController的构造函数
BrokerController初始化的时候会将刚才创建的BrokerConfig,NettyServerConfig,NettyClientConfig,MessageStoreConfig进行传入到BrokerController中,进行创建。
//创建BrokerController 对象
final BrokerController controller = new BrokerController(
brokerConfig,
nettyServerConfig,
nettyClientConfig,
messageStoreConfig);
// remember all configs to prevent discard
controller.getConfiguration().registerConfig(properties);
//进行BrokerController的初始化
boolean initResult = controller.initialize();
if (!initResult) {
controller.shutdown();
System.exit(-3);
}
我们紧接着看下BrokerController的构造函数,代码如下:
public BrokerController(
final BrokerConfig brokerConfig,
final NettyServerConfig nettyServerConfig,
final NettyClientConfig nettyClientConfig,
final MessageStoreConfig messageStoreConfig
) {
this.brokerConfig = brokerConfig;
this.nettyServerConfig = nettyServerConfig;
this.nettyClientConfig = nettyClientConfig;
this.messageStoreConfig =