RocketMQ篇8:NameServer源码解析

模块入口代码功能
RocketMQ篇8:NameServer源码解析
文章图片
NamesrvStartup是模块的启动入口 , NamesrvController是用来协调各个调用模块功能的代码 。
1、解析命令行参数
main0函数主要完成两个功能 , 第一个功能是解析命令行参数;
-c命令行参数是指定配置文件的位置
-p命令行参数是用来打印所有配置项的值 。
RocketMQ篇8:NameServer源码解析
文章图片
2、初始化NameServer的Controller
main0函数的另一个功能是初始化Controller 。
根据解析出的配置参数 , 调用controller.initialize()来初始化 , 然后调用controller.start()让NameServer开发服务 。
还有一个逻辑是注册ShutdonwHookThread , 当程序退出的时候回调用controller.shutdonw来做退出前的清理工作 。
RocketMQ篇8:NameServer源码解析
文章图片
NameServer的总控逻辑
NameServer的总控逻辑在NamesrvController中 , 是集群的协调者 , 它只是简单地接受其他角色报上来的状态 , 然后根据请求返回响应的状态 。
【RocketMQ篇8:NameServer源码解析】1、线程池初始化
启动了一个默认8个线程的线程池 , 还有两个定时执行的线程 , 一个用来扫描失效的Broker , 另一个用来打印配置信息 。
RocketMQ篇8:NameServer源码解析
文章图片
2、启动通信服务 , 关联初始化的线程池
启动负责通信的服务remotingServer , 监听一些端口 , 收到Broker、Client等发过来的请求后 , 根据请求的命令 , 调用不同的Processor来处理 。 这些不同的处理逻辑被放到上面初始化的线程池中执行 。
RocketMQ篇8:NameServer源码解析
文章图片
核心业务逻辑处理
NameServer的核心业务逻辑 , 在DefaultRequestProcessor中 。 网络通信服务模块收到请求后 , 就调用这个Processor来代理 。
根据RequestCode调用不同的函数来处理 , 如:REGISTER_BROKER是集群中新加入一个Broker;GET_ROUTEINFO_BY_TOPIC是请求获取一个Topic的路由信息;WIPE_WRITE_PERM_OF_BROKER是删除一个Broker的写权限 。
RocketMQ篇8:NameServer源码解析
文章图片
集群状态存储
NameServer作为集群的协调者 , 需要保存和维护集群的各种元数据 , 是通过RouteInfoManager类来实现的 。
每个结构存储着一类集群信息 , 具体请看我之前发布的文章:《RocketMQ篇3:分布式消息队列的协调者》中的集群状态的存储结构
RocketMQ篇8:NameServer源码解析
文章图片
因为在NameServer的场景中 , 读取操作多 , 更改操作少 。 RouteManager中使用的是可重入的读写锁(ReentrantReadWriteLock)
RocketMQ篇8:NameServer源码解析
文章图片


    推荐阅读