1. 程式人生 > >RocketMQ原始碼分析(一)之除錯環境搭建

RocketMQ原始碼分析(一)之除錯環境搭建

版本宣告

  1. 基於rocketmq-all-4.3.1版本
  2. 所有分析是根據自己的理解,因為不是RocketMQ的原始開發者,所以肯定會存在分析不正確的地方,如有發現歡迎指正,謝謝!
  3. 規定$ROCKETMQ_SOURCE為原始碼根目錄

原始碼除錯環境搭建

  1. 克隆程式碼到本地,使用idea開啟如下圖
  2. 原始碼目錄結構
    • broker:整個mq的核心,他能夠接受producer和consumer的請求,並呼叫store層服務對訊息進行處理。HA服務的基本單元,支援同步雙寫,非同步雙寫等模式。
    • client::RocketMQ客戶端實現
    • common:一些模組間通用的功能類,比如一些配置檔案、常量。
    • distribution
      :釋出指令碼以及相關的配置檔案
    • example:官方提供的例子
    • filter,過濾器,用於服務端 SQL92 的過濾方式
    • logappender:日誌相關
    • namesrv:可以理解成註冊中心,每個 broker 都會在這裡註冊,client 也會從這裡獲取 broker 的相關資訊
    • remoting:基於netty的底層通訊實現,所有服務間的互動都基於此模組。
    • srvutil:解析命令列的工具類。
    • store:儲存層實現(負責訊息的儲存和讀取),同時包括了索引服務,高可用HA服務實現。
    • tools:mq叢集管理工具,提供了訊息查詢等功能。

啟動NameServer

  1. 檢視$ROCKETMQ_SOURCE/distribution/bin/mqnamesrv.sh

    指令碼可以看到如下命令,可以看出是委託${ROCKETMQ_HOME}/bin/runserver.sh這個指令碼來啟動org.apache.rocketmq.namesrv.NamesrvStartup這類的。因為我們不是二進位制安裝包啟動,所以如果我們要找到這個指令碼,這裡的${ROCKETMQ_HOME}必須設定為原始碼目錄的$ROCKETMQ_SOURCE/distribution才可以

      ...省略...
      export ROCKETMQ_HOME
      sh ${ROCKETMQ_HOME}/bin/runserver.sh org.apache.rocketmq.namesrv.NamesrvStartup 
    [email protected]
  2. 檢視$ROCKETMQ_SOURCE/distribution/runserver.sh檔案,這個指令碼主要是JVM的配置

        ... 省略 ...
        JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
        ... 省略 ...
    
  3. idea配置NamesrvStartup類啟動引數,NamesrvConfig需要通過$ROCKETMQ_HOME來讀取conf目錄的配置,所以這裡的$ROCKETMQ_HOME設定為$ROCKET_SOURCE/distribution

啟動Broker

  1. 檢視$ROCKETMQ_SOURCE/distribution/bin/mqbroker.sh可以看到如下命令,${ROCKETMQ_HOME}/bin/runbroker.sh這個指令碼來啟動org.apache.rocketmq.broker.BrokerStartup,與NameServer啟動流程類似

        ... 省略... 
        export ROCKETMQ_HOME
    
        sh ${ROCKETMQ_HOME}/bin/runbroker.sh org.apache.rocketmq.broker.BrokerStartup [email protected]
    
    
  2. 檢視$ROCKETMQ_SOURCE/distribution/runbroker.sh,此指令碼主要也是JVM配置

        ... 省略... 
        JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
        ... 省略... 
    
  3. idea配置BrokerStartup啟動引數