rocketmq--nameserver的启动流程

本文解析RocketMQ NameServer启动过程,从NameserverStartUp main方法入手,介绍配置加载、初始化RemotingServer、线程池及定时任务设置,直至Netty服务端启动监听。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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的启动大致就是这样了。

               

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值