开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段):NameServer 启动步骤二】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/704/detail/12462
NameServer 启动步骤二
步骤二:
根据启动属性创建NamesrvCongroller实例,并初始化该实例。NameServerController实例为NameServer核心控制器
相关源码:
public static Namesrvcontroller main0(string[ ] args){
try {
Namesrvcontroller controller = createNamesrvContro
ller(args);
start(controller) ;
string tip = "The Name server boot success. serializeType="+Remotingcommand.getserializeTypeconfigInThisserver();
log.info(tip);
system.out.printf("%s%n", tip);
return controller;
}catch (Throwable e) {
e.printstackTrace();
system.exit( status: -1);
}
第一步完成的标志是创建一个controller,之后是启动controller,在controller的里面是:
public static NamesryController start(final NamesrController controller) throws Exception {
if (null == controller) {
throw new IllegalArgumentException("Namesry
Controller is null");
}
boolean initResult = controller.initiaize();
if ( ! initResult) {
controller.shutdown( );
system.exit( status: -3);
}
Runtime.getRuntime().addshutdownHook(new ShutdownHookThread(Log,new callable<Void>() {
@override
public void call( ) throws Exception {
controller.shutdown( );
return null;
}
}))}
boolean initResult = controller.initiaize()
是在进行controller的初始化。
Controller初始化:
public boolean initialize( {
//加载KV配置
this.kvconfigManager. 1oad(;
//创建Nettyserver网络处理对象
this.remotingserver = new NettyRemotingserver(this
.nettyserverconfig,this.brokerHousekeepingservice);
//创建线程池,注册请求处理器,线程池的目的是接收客户端的请求
this.remotingExecutor =
Executors.newFixedThreadPoo1(nettyserverconfig.getserverworkerThreads(),new ThreadFactoryImpl
this.registelProcessor() ;
//开启定时任务:每隔10s扫描一次Broker ,移除不活跃的Broker
this.scheduledExecutorservice.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
NamesrvController.this.routeInfoManager.scanNotActiveBroker();
}
}, initialDelay: 5,period: 10,TimeUnit.SECONDS) ;
//开启定时任务:每隔10min打印一次KV配置
this.scheduledExecutorservice.scheduleAtFixedRate(new Runnable() {
@Override
pub1ic void run(){
Namesrvcontro1ler.this.kvconfigManager.printA11Periodically();
}
},1,10,Timeunit.MINUTES);
return true;
}
初始化主要要做:加载KV配置;创建remotingserver;创建线程池,线程池的目的是接收客户端的请求并进行处理;最关键的是开启定时任务,每隔10秒扫描broker,清除不活跃的broker。