nameserver代码结构
代码非常少。我用的版本是4.9.8,namesrv模块,只有6个文件。
代码很简练。功能也就意味着比较少。
启动线程图
使用arthas分析
- FileWatchService是用于检测ssl文件变更的。不太懂,后续再了解
- AsyncAppender-Worker-RocketmqNamesrvAppender logback的一个线程
- NSScheduledThread1 定时任务线程。总共两个任务。后续有分析
- NettyNIOBoss_1 Netty的boss线程池,线程模型是reactor模型,boss线程负责远程client的连接请求
- NettyEventExecutor netty的一个线程,待分析
- RemotingExecutorThread_X 提供给netty处理业务的线程池里的线程。用于接受product、consumer、broker的RPC请求
namesrv启动流程图
这张图,描述了启动的执行流程和定时任务。
启动流程比较简单,不做详细分析了。
后续DefaultRequestProcessor、RouteInfoManager分析
org.apache.rocketmq.namesrv.processor.DefaultRequestProcessor#processRequest
product、consumer、broker的rpc请求,都会进入该方法。后续一一分析
RouteInfoManager内存中,有几个成员变量map,管理topic、broker、心跳等。后续分析
public RemotingCommand processRequest(ChannelHandlerContext ctx,
RemotingCommand request) throws RemotingCommandException {
if (ctx != null) {
log.debug("receive request, {} {} {}",
request.getCode(),
RemotingHelper.parseChannelRemoteAddr(ctx.channel()),
request);
}
switch (request.getCode(