rocketmq nameserver啓動入口

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章