NameServer
NameServer是一个注册中心,支持Broker的注册与发现,Broker在启动的时候会向NameServer注册(服务注册),Producer和Consumer会通过NameServer拉取信息,获取Topic的路由信息(服务发现)。
NamesrvStartup
NameServer的启动类是NamesrvStartup。
1.NameServer在启动的时候会创建一个NamesrvController,它是NameServer的核心组件;
在创建NamesrvController的方法中,主要是对一些配置信息的处理,比如在启动的时候命令行中指定了配置文件,那么就会读取这个配置文件的参数,如果没有指定,就使用默认的配置来初始化NameServer(NamesrvConfig)和Netty(NettyServerConfig)网络配置的相关参数。
2.初始化NamesrvController,注册JVM服务器关闭时的钩子函数,以便在关闭的时候做一些处理,最后通过创建的NamesrvController启动NameServer;
1 | public class NamesrvStartup { |
NamesrvController
初始化
NmaeServer作为一个注册中心,是需要接收Broker的注册,以及Producer和Consumer的数据拉取,NameServer必然要启动一个服务器接收这些请求,所以初始化代码中,主要是初始化Netty服务器,和一些定时任务线程池。
进入controller.initialize()方法,看一下初始化的代码:
1 | public class NamesrvController { |
启动
初始化Controller之后就可以启动NameServer了,其实主要就是启动Netty服务器:1
2
3
4
5
6
7
8
9// 启动NameServer
public void start() throws Exception {
// 启动Netty服务器
this.remotingServer.start();
if (this.fileWatchService != null) {
this.fileWatchService.start();
}
}
NettyRemotingServer
进入NettyRemotingServer的start的方法,这里主要是Netty相关的代码:
1 | public class NettyRemotingServer extends NettyRemotingAbstract implements RemotingServer { |
总结
NameServer的启动主要就是初始化相关配置参数,构建一个基于Netty的网络服务器,启动Netty服务器,接收Broker和Producer、Consumer的网络请求,进行网络通信。
注:图片来自于儒猿技术窝-从 0 开始带你成为消息中间件实战高手
参考
儒猿技术窝:从 0 开始带你成为消息中间件实战高手