RocketMQ学习-NameServer-1

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180402G1OVK500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券