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來處理客戶端請求