1. 入口在 NameserverStartUp 的main方法。
首先调用 createNameserverController 创建nameserverController。
这个方法它会去 创建 NamserverConfig 还有NettyServerConfig 两个配置类对象,他们都是有默认值的,我们可以事先创建好nameserver的配置文件,key,value格式的保存到
机器上,在启动namerserver时候用-c参数 带上配置文件的地址 ,就会去加载对应的配置文件,我们就可以做一些个性化的定制对nameserver,比如暴露的端口号等等,还有个很关键的namerserver管理topic路由信息的routeInfoManager组件。
2. 创建好nameserverController之后,就要调用nameserverController的initlize方法,进行初始化。
初始化主要做了这几件事情
一:初始化 RemotingServer组件,即nameserver的通信模块 rocketmq网络通信框架是用netty框架进行网络通信的。将必要的netty服务端配置配置好,
二:创建好处理namersever端 公共服务的线程池,这个线程池专门用来处理一些来自外部的默认的请求处理(例如broker发送的心跳,生产者与消费者拉取topic路由信息等),稍后它会与DeafutProcessor进行半绑定,生成一个defaultRequestProcessor,每次broker或者client请求发送过来,通过这个defaultRequestPair就能够将请求的任务丢给这个默认线程池进行执行,
三:同时也会创建一个专门用来服务namerserver的定时任务线程池,这个定时任务线程池的作用也很重要,创建完成后会让其定时执行例如定时扫描routeInfoManager组件中的brokerLiveTable表中存储的broker的存活情况,这个brokerLiveTable,顾名思义就是用来存储broker发送心跳给namerver的时候,nameserver会将broker的信息缓存到这个表上,nameserver每次接收到对应broker的心跳请求后会去更新此表,表中记录了此broker的上一次发心跳时间,更新此心跳时间为当前时间。 若有个broker超过120S未发送心跳,则定时任务会通过对比此broker上一次发送心跳的时间与当前时间若超过120s就将此broker与namerserver建立的链接断开,可判定为broker发生故障了。
3.nameserverController的initlize方法调用完毕后调用start方法:
调用start方法,则去调用之前创建好的RemotingServer的start方法,底层最终去调用Netty的服务端启动对象serverBootstrap.bind方法开始监听请求。
nameserver的启动大致就是这样了。