NameServer在RocketMQ中的角色是配置中心,主要有两个功能:Broker管理、路由管理。因此NameServer上存放的主要信息也包括两类:Broker相关的信息、路由信息。
NameServer模块的结构如下:
上面这些类之间的依赖关系图如下图所示:
可以看出,入口是NamesrvStartup类,name server通过NamesrvController控制器来协调其他功能。
启动器的主要流程
使用common-cli包处理命令行参数
读取并设置服务器配置,包括NameServer的配置和NettyServer的配置
读取日志框架配置并初始化日志框架
初始化NameServer控制器(注意:NameServer的配置和Netty服务器的配置为初始化参数)
设置JVM关闭时的钩子
知识点
NettyServerConfig,rmq中用于配置Netty服务器的配置文件,这里对于Netty线程模型不展开讲。
NameServerConfig
JVM钩子 JVM可能是正常退出也可能是异常退出,在异常退出的时候开发者希望有工具可以清理现场,这就是JDK 1.3开始提供的关闭钩子(Shutdown Hook)。关闭钩子在以下几个场景下被触发:最后一个正常线程结束、System.exit()、通过平台特定的方式被关闭、系统断电。使用关闭钩子的时候需要避免并发问题,方法是:注册一个关闭钩子,顺序执行各项清理工作。RMQ中注册关闭钩子的代码如下:
参考资料
JAVA虚拟机关闭钩子(Shutdown Hook)
RocketMQ源码分析之NameServer
领取专属 10元无门槛券
私享最新 技术干货