RocketMQ源碼解讀系列——1、namesrv源碼

我看的源碼是RocketMQ的3.2.6版本,該版本是RocketMQ被apache組織孵化之前的版本了,但是不影響源碼閱讀,閱讀源碼主要是想學一下大牛們的開發思想

namesrv的項目結構:

NamesrvStartup類作爲namesrv的啓動入口,主要作用是加載配置文件,環境檢查,調用NamesrvController類啓動server服務

NamesrvController作爲namesrv服務控制類,作爲namesrv服務的控制核心,其主要方法如下:

    public boolean initialize() {
        // 加載KV配置
        this.kvConfigManager.load();

        // 初始化通信層
        this.remotingServer = new NettyRemotingServer(this.nettyServerConfig, this.brokerHousekeepingService);

        // 初始化線程池
        this.remotingExecutor =
                Executors.newFixedThreadPool(nettyServerConfig.getServerWorkerThreads(),
                    new ThreadFactoryImpl("RemotingExecutorThread_"));

        this.registerProcessor();

        // 增加定時任務--掃描過期的broker
        this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {

            @Override
            public void run() {
                NamesrvController.this.routeInfoManager.scanNotActiveBroker();
            }
        }, 5, 10, TimeUnit.SECONDS);
        //打印所有的config
        this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {

            @Override
            public void run() {
                NamesrvController.this.kvConfigManager.printAllPeriodically();
            }
        }, 1, 10, TimeUnit.MINUTES);

        // this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
        //
        // @Override
        // public void run() {
        // NamesrvController.this.routeInfoManager.printAllPeriodically();
        // }
        // }, 1, 5, TimeUnit.MINUTES);

        return true;
    }
    /**
     * 啓動namesrv服務端
     * @throws Exception
     * @author: yangcheng
     */
    public void start() throws Exception {
        this.remotingServer.start();
    }

RouteInfoManager.java類,原註釋是“運行過程中的路由信息,數據只在內存中因此宕機後數據消失;但是Broker會定期推送最新數據”,其主要屬性如下(類中其他方法主要作用就是對這些屬性的增刪查改):

    /**
     * topic與該topic相關連的所有queue--queue中包含了brokerName值
     */
    private final HashMap<String/* topic */, List<QueueData>> topicQueueTable;
    /**
     * broker的信息緩存
     */
    private final HashMap<String/* brokerName */, BrokerData> brokerAddrTable;
    /**
     * 集羣名稱與集羣中所有brokername的關係緩存
     */
    private final HashMap<String/* clusterName */, Set<String/* brokerName */>> clusterAddrTable;
    /**
     * 激活狀態的Broker
     */
    private final HashMap<String/* brokerAddr */, BrokerLiveInfo> brokerLiveTable;
    private final HashMap<String/* brokerAddr */, List<String>/* Filter Server */> filterServerTable;

 

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