NameServer在RocketMQ中的角色是配置中心,主要有两个功能:Broker管理、路由管理。因此NameServer上存放的主要信息也包括两类:Broker相关的信息、路由信息。
NameServer模块的结构如下:
name server代码结构
上面这些类之间的依赖关系图如下图所示:
name server类图
可以看出,入口是NamesrvStartup类,name server通过NamesrvController控制器来协调其他功能。
public class NettyServerConfig implements Cloneable {
//监听的端口
private int listenPort = 8888;
//服务器工作线程数
private int serverWorkerThreads = 8;
//服务器回调执行线程数
private int serverCallbackExecutorThreads = 0;
//服务器选择线程数
private int serverSelectorThreads = 3;
//单向信号量
private int serverOnewaySemaphoreValue = 256;
//异步信号量
private int serverAsyncSemaphoreValue = 64;
//通道的最大空余时间(秒)
private int serverChannelMaxIdleTimeSeconds = 120;
private int serverSocketSndBufSize = NettySystemConfig.socketSndbufSize;
private int serverSocketRcvBufSize = NettySystemConfig.socketRcvbufSize;
private boolean serverPooledByteBufAllocatorEnable = true;
/**
* make make install
*
*
* ../glibc-2.10.1/configure \ --prefix=/usr \ --with-headers=/usr/include \
* --host=x86_64-linux-gnu \ --build=x86_64-pc-linux-gnu \ --without-gd
*/
private boolean useEpollNativeSelector = false;
//省略getter and setter
}
public class NamesrvConfig {
private static final Logger log = LoggerFactory.getLogger(LoggerName.NAMESRV_LOGGER_NAME);
//rmq的家目录
private String rocketmqHome = System.getProperty(MixAll.ROCKETMQ_HOME_PROPERTY, System.getenv(MixAll.ROCKETMQ_HOME_ENV));
//kv配置的存放目录
private String kvConfigPath = System.getProperty("user.home") + File.separator + "namesrv" + File.separator + "kvConfig.json";
//namesrv的配置文件的存放路径
private String configStorePath = System.getProperty("user.home") + File.separator + "namesrv" + File.separator + "namesrv.properties";
private String productEnvName = "center";
private boolean clusterTest = false;
//是否开启顺序消息特性
private boolean orderMessageEnable = false;
//省略getter and setter
}
//设置JVM的关闭钩子
Runtime.getRuntime().addShutdownHook(new ShutdownHookThread(log, new Callable<Void>() {
@Override
public Void call() throws Exception {
controller.shutdown();
//controller.shutdown()中做了什么事情:关闭Netty服务端、关闭服务线程池、关闭调度线程池。
return null;
}
}));