美文网首页
RocketMQ-NameServer模块解析之服务启动

RocketMQ-NameServer模块解析之服务启动

作者: 一语长情 | 来源:发表于2022-07-11 12:24 被阅读0次

RocketMQ整体物理架构如下:   

NameServer是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现。主要包括两个功能:Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;路由信息管理,每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息。然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。NameServer通常也是集群的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息,Producer和Consumer仍然可以动态感知Broker的路由的信息。

RocketMQ源码解析基于4.9.4版本,此版本为4.X系列最新版本

NameServer服务启动解析

NameServer服务的启动的入口类-NamesrvStartup,启动NamerServer的命令行脚本 bin/mqnamesrv 调用的就是这个类文件。

涉及到NameSrvController的创建以及启动

createNamesrvController方法创建了两个对象一个是nettyServerConfig ,关于Netty的服务端配置,一个是nameSrvConfig,关于NameServer的配置

若命令行参数中包含配置文件的路径,那么加载配置文件,初始化nettyServerConfig和nameSrvConfig

命令行参数指定是否需要打印加载的配置信息,打印加载的信息会正常的退出程序

将命令行其余指定的配置参数加载到nameSrvConfig,这个优先级高于配置文件,可能存在覆盖的情况.

将初始化完成的nameSrvConfig 和 nettyServerConfig作为构造参数,创建NamesrvController对象并返回

至此,createNamesrvController方法执行完毕,这个方法主要是加载命令行配置,构建nameSrvConfig和nettyServerConfig,然后以此作为构建参数创建NamesrvController对象

NamesrvController类主要属性介绍

接下来,调用start方法,初始化并且启动NameServer服务

NamesrvController的initialize方法主要是加载并初始化NameServer的所需要的资源,包括:

kvConfig配置、NettyServer服务器、请求处理线程池、请求处理器、定时调度服务、安全通信模块

NamesrvController的start方法启动NameServer服务

启动nettyServer服务,开始监听端口,接受来自客户端的请求

启动fileWatchServer线程,启动ssl安全通信文件的监听服务

至此,NameServer模块的服务已经启动完成了,总体来看,启动主要分为3个步骤:

1.加载配置文件以及命令行配置

2.初始化NameServer需要的各种资源配置

3.启动NameServer,开始接收客户端的请求

相关文章

网友评论

      本文标题:RocketMQ-NameServer模块解析之服务启动

      本文链接:https://www.haomeiwen.com/subject/ehfabrtx.html