RocketMQ源码学习笔记:NameServer启动流程

这是本人学习的总结,主要学习资料如下


1、Overview

NameServer主要就做三件事

  • NameServer启动:启动监听,等待Broker,Prod ucer,Consumer连接注册。
  • 路由注册:Borker启动后向所有NameServer发送路由和心跳信息。
  • 路由剔除:移除心跳超时的Broker相关路由信息。

源码学习也是针对核心功能看RocketMQ如何实现这三个功能。

这是RocketMQ的整体流程图。

图中的NRCNetty Remoting Client的缩写。可以看出RocketMQ是基于Netty实现网络通信。
在这里插入图片描述


2、NameServer启动流程

2.1、总结

入口是NamesrvStartup的psvm方法。

前面做完必要的参数处理之后,会创建一个NamesrvController的实例,由他负责初始化的工作,比如加载key-value配置,定时任务等。

所以源码分析的重点会放在NamesrvController的构建以及它的initialize()方法。
在这里插入图片描述

2.2、NamesrvController

2.2.1、主要职责

负责加载KV配置,构建NRS通讯实例,构建定时任务

这意味着它的成员变量会有一些集合,比如HashMap,用来存放各种各样的key-value配置。

同时会有NettyRemotingServer的实例代表着构建好的通讯实例。

还会有一些线程池用于定时任务。


2.2.2、关键的成员变量

NamesrvController中的重要成员变量对应着它的职责。

KVConfigManager对应着加载key-value配置。

RemotingServer负责网络请求。

RouteInfoManager则是负责路由管理。路由管理是指管理broker注册的路由信息。与路由相关的动作与信息都在这个变量中。它对于读写锁的运用也值得学习。

2.2.3、核心代码

NamesrcController相关代码需要从这两条线看。

  • main() -> main0() -> createNamesrcController()
    这个主要是实例化NamesrcController。当然在实例化之前会做一些检查,检查的代码较长,但最核心的就只有一句new NamesrvController(namesrvConfig, nettyServerConfig);。主要是将一些来自外部的配置信息注入到NamesrcController的成员变量中,为接下来的初始化做准备。

在这里插入图片描述

  • main() -> main0() -> start() -> controller.initialize()
    initialize()方法是最关键的,因为涉及到线程池的设置,NameServer的一些关键行为比如心跳检查,不活跃剔除的具体信息就可以在这里找到。看下图我们可以知道,移除不活跃的broker的定时认识是每10s一次,写死的值不可更改。

在这里插入图片描述


2.2.4、值得注意的点

  1. createNamesrvController()方法中,需要构建一个NettyServerConfig实例用来配置网络通信,其中包括NameServer监听的端口号。在源码中端口号被写死成9876,完全无法通过任何配置修改,nettyServerConfig.setListenPort(9876);。所以实际使用中想要修改NameServer监听的端口号就只能下载源码来改装。

  2. createNamesrvController()方法中,有一段分支会结束当前进程并答应所有配置信息,可以用来debug。在if (commandLine.hasOption('p')){}中,意味着我们只要在启动参数中配置一个-p就可以打印所有配置项。

在这里插入图片描述

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值