name server功能
name server在角色上类似zookeeper。提供服务注册、维持活跃broker列表、维护broker集群信息、维护topic(包括system_topic)信息等
程序入口
com.alibaba.rocketmq.namesrv.NamesrvStartup.main(String[])
主要的类
com.alibaba.rocketmq.namesrv.NamesrvStartup
com.alibaba.rocketmq.namesrv.NamesrvController
NamesrvStartup main方法执行后,主要是去构建NamesrvController类的实例;
在NamesrvController中主要是两个主要的方法:
com.alibaba.rocketmq.namesrv.NamesrvController.initialize()
initialize方法主要功能是
1、加载了配置文件并初始化
2、构建了 服务端通信层对象(private RemotingServer remotingServer),底层是通过netty的ServerBootstrap实现的
3、注册处理请求的类
DefaultRequestProcessor这个类里实现了nameServer接收请求后的所有大部分处理
以上包含了broker的请求,客户端连接等一系列操作
4、开启扫描不活动的broker,打印功能等的定时任务
com.alibaba.rocketmq.namesrv.NamesrvController.start()
start方法主要功能是
启动了 服务端通信层对象,向ServerBootstrap注册了处理请求的handler;其中NettyConnetManageHandler和NettyServerHandler是处理请求逻辑实现主要的handler。
NettyConnetManageHandler继承自ChannelDuplexHandler,重写了
channelRegistered(ChannelHandlerContext ctx),
channelUnregistered(ChannelHandlerContext ctx),
channelActive(ChannelHandlerContext ctx),
channelInactive(ChannelHandlerContext ctx),
userEventTriggered(ChannelHandlerContext ctx, Object evt),
exceptionCaught(ChannelHandlerContext ctx, Throwable cause)方法,用来监听连接和异常等,其中(channelRegistered,channelUnregistered)是打印一些日志,
其他方法则是向NettyEventExecuter的eventQueue中添加对应的NettyEvent对象,这些对象将会在NettyEventExecuter在后续执行run方法后(是一个Runnable接口实现)不断的从队列中取出并消费(消费实际处理者是ChannelEventListener);
NettyServerHandler继承自SimpleChannelInboundHandler,重写了其
channelRead0(ChannelHandlerContext ctx, RemotingCommand msg)方法,用于读取数据最终是调用DefaultRequestProcessor的processRequest来处理客户端请求