Java游戏服务器开发

Rocketmq的Namesrv服务启动时都做了什么

2020-04-09  本文已影响0人  王广帅

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;
        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

如果在启动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服务。

欢迎关注
上一篇下一篇

猜你喜欢

热点阅读