Rocketmq的Namesrv服務啓動時都做了什麼

rocketmq-namesrv服務的啓動類是NamesrvStartup。在啓動的時候,首要的加載兩個配置文件的信息,這兩個配置文件對應的類是NamesrvConfigNettyServerConfig

NamesrvConfig

它的配置內容是:

private String rocketmqHome = System.getProperty(MixAll.ROCKETMQ_HOME_PROPERTY, System.getenv(MixAll.ROCKETMQ_HOME_ENV));
    private String kvConfigPath = System.getProperty("user.home") + File.separator + "namesrv" + File.separator + "kvConfig.json";
    private String configStorePath = System.getProperty("user.home") + File.separator + "namesrv" + File.separator + "namesrv.properties";
    private String productEnvName = "center";
    private boolean clusterTest = false;
    private boolean orderMessageEnable = false;
  • rocketmqHome
    這是rocketmq運行的根目錄,它默認是從環境變量裏面獲取的,它不能爲空,如果爲空,Namesrv服務就會啓動失敗,並退出jvm,如下所示:
        if (null == namesrvConfig.getRocketmqHome()) {
            System.out.printf("Please set the %s variable in your environment to match the location of the RocketMQ installation%n", MixAll.ROCKETMQ_HOME_ENV);
            System.exit(-2);
        }

在rocketmq-namesrv的啓動腳本mqnamesrv中會設置這個字段的環境變量值

if [ -z "$ROCKETMQ_HOME" ] ; then
  ## resolve links - $0 may be a link to maven's home
  PRG="$0"

  # need this for relative symlinks
  while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
      PRG="$link"
    else
      PRG="`dirname "$PRG"`/$link"
    fi
  done

  saveddir=`pwd`

  ROCKETMQ_HOME=`dirname "$PRG"`/..

  # make it fully qualified
  ROCKETMQ_HOME=`cd "$ROCKETMQ_HOME" && pwd`

  cd "$saveddir"
fi

export ROCKETMQ_HOME
  • kvConfigPath
    存儲KV健值對的文件路徑,在服務器啓動的會從這個路徑文件中加載到內存中。最外層是Namespace,說明這些鍵值對是在不同的命令空間下的。

  • configStorePath
    namesrv.properties文件的路徑

  • configStorePath
    如果是通過配置文件啓動Namesrv服務的,這個字段就是用來存儲這個配置文件的存儲路徑的。

如果在啓動Namesrv時,指定了配置文件,那麼NamesrvConfigNettyServerConfig的配置信息就會從這個配置文件中加載。

在rocketmq的官方發佈版本中,並沒有指定這個配置文件,使用的都是默認的參數。如果想修改默認的配置參數,可以通過這個配置文件進行修改。然後修改服務的啓動腳本,指定配置文件的路徑。
另外,NamesrvConfig的參數也可以在命令行中指定,即從main方法的args中讀取,它的優先級最高,它會覆蓋配置文件中的參數。

NettyServerConfig

這個配置類是封裝的是一些服務啓動時,Netty相關的參數,比如端口,線程數等。

    private int listenPort = 8888;//服務監聽的端口,在啓動的時候會默認設置爲9876
    private int serverWorkerThreads = 8;
    private int serverCallbackExecutorThreads = 0;
    private int serverSelectorThreads = 3;
    private int serverOnewaySemaphoreValue = 256;
    private int serverAsyncSemaphoreValue = 64;
    private int serverChannelMaxIdleTimeSeconds = 120;

    private int serverSocketSndBufSize = NettySystemConfig.socketSndbufSize;
    private int serverSocketRcvBufSize = NettySystemConfig.socketRcvbufSize;
    private boolean serverPooledByteBufAllocatorEnable = true;

除了端口,如果不是爲了性能優化,基本上不需要修改,默認即可。

加載日誌配置文件

它使用的是logback的日誌框架。

 LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
        JoranConfigurator configurator = new JoranConfigurator();
        configurator.setContext(lc);
        lc.reset();
        configurator.doConfigure(namesrvConfig.getRocketmqHome() + "/conf/logback_namesrv.xml");

        log = InternalLoggerFactory.getLogger(LoggerName.NAMESRV_LOGGER_NAME);

這個配置文件在RocketmqHome下的config/目錄下面。

啓動Netty服務

最後一步就是根據配置信息,初始化NamesrvController,然後調用start方法,啓動Netty服務。

在這裏插入圖片描述

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