文章目录
private static final InternalLogger log = InternalLoggerFactory.getLogger(LoggerName.NAMESRV_LOGGER_NAME);
可以看到我们其实才读了一行代码,在这里KVConfigManager的头部,声明了log,LoggerName为“RocketmqNamesrv”,这也对应我们当前在读的总包,是在namesrv包下。
到了第二行:
private final NamesrvController namesrvController;
这里声明了一个NamesrvController,然后接下来我们去看下这里面做了哪些事。
org.apache.rocketmq.namesrv.NamesrvController
private static final InternalLogger log = InternalLoggerFactory.getLogger(LoggerName.NAMESRV_LOGGER_NAME);
private final NamesrvConfig namesrvConfig;
private final NettyServerConfig nettyServerConfig;
private final ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(new ThreadFactoryImpl(
"NSScheduledThread"));
private final KVConfigManager kvConfigManager;
private final RouteInfoManager routeInfoManager;
进来之后首先是之前我们已经看过的InternalLogger,与KVConfigManager里声明的一模一样。接着下面是两个Config,内部就是一些常规的配置参数,不过并没有使用注解开发,全部是原生的get set方法。
还声明了一个单线程实例的ExecutorService
进入第一个比较重要的接口:
org.apache.rocketmq.remoting.RemotingServer
RemotingServer是一个接口,我们直接进入它的唯一实现类看看:
org.apache.rocketmq.remoting.netty.NettyRemotingServer
private static final InternalLogger log = InternalLoggerFactory.getLogger(RemotingHelper.ROCKETMQ_REMOTING);
此处的日志工具的LoggerName是RocketmqRemoting了,因为此时其实已经调到了remoting包下,不在namesrv包了。
先不追究RemotingHelper,继续读NettyRemotingServer
private final ServerBootstrap serverBootstrap;
private final EventLoopGroup eventLoopGroupSelector;
private final EventLoopGroup eventLoopGroupBoss;
private final NettyServerConfig nettyServerConfig;
private final ExecutorService publicExecutor;
private final ChannelEventListener channelEventListener;
private final Timer timer = new Timer("ServerHouseKeepingService", true);
private DefaultEventExecutorGroup defaultEventExecutorGroup;
接下来声明的,是RocketMq中为数不多依赖的东西,netty中的ServerBootstrap,EventLoopGroup,EventLoopGroup,ChannelEventListener,DefaultEventExecutorGroup,使用过netty的同学应该对这几个类并不陌生,我们先不去看netty的源码了,一会看他怎么用。
除这几个netty的类以外,还有一个声明为守护进程的Timer,一个来自JUC包下提交异步任务的ExecutorService