rocketmq nameserver

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Aqu415/article/details/79686309

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来处理客户端请求


猜你喜欢

转载自blog.csdn.net/Aqu415/article/details/79686309