RocketMQ源码解析——Broker部分之Broker启动过程BrokerStartup(1)

从启动脚本到启动类

 我们知道RocketMQ的Broker端的启动方式为,进入到RocketMQ的bin目录下,运行对应的mqbroker脚本。
 RocketMQ的Linux和Windows脚本内容也就是对应的mqbroker脚本,这里贴出来看看

//省略部分脚本
export ROCKETMQ_HOME

sh ${ROCKETMQ_HOME}/bin/runbroker.sh org.apache.rocketmq.broker.BrokerStartup $@

 上面这段是Linux系统下的shell脚本,

if not exist "%ROCKETMQ_HOME%\bin\runbroker.cmd" echo Please set the ROCKETMQ_HOME variable in your environment! & EXIT /B 1

call "%ROCKETMQ_HOME%\bin\runbroker.cmd" org.apache.rocketmq.broker.BrokerStartup %*

IF %ERRORLEVEL% EQU 0 (
   ECHO "Broker starts OK"
)

 上面这段是Windows系统下的cmd脚本命令。从这两段脚本中可以看出,最后的都会运行一个runbroker的脚本,还会把一个类的全路径名作为参数传进去,这个类就是启动类BrokerStartup

启动类BrokerStartup

BrokerStartup的启动函数是main函数,里面的代码也简单只有一行,主要的逻辑也简单,就是创建BrokerController类(后面说),然后启动。

	public static void main(String[] args) {
   
        //创建createBrokerController然后启动
        start(createBrokerController(args));
    }
启动的准备工作createBrokerController
public static BrokerController createBrokerController(String[] args) {
   
        //MQ的版本号
        System.setProperty(RemotingCommand.REMOTING_VERSION_KEY, Integer.toString(MQVersion.CURRENT_VERSION));
        //设置broker的netty客户端的发送缓冲大小,默认是128 kb
        if (null == System.getProperty(NettySystemConfig.COM_ROCKETMQ_REMOTING_SOCKET_SNDBUF_SIZE)) {
   
            NettySystemConfig.socketSndbufSize = 131072;
        }
        //设置broker的netty客户端的接收缓冲大小,默认是128 kb
        if (null == System.getProperty(NettySystemConfig.COM_ROCKETMQ_REMOTING_SOCKET_RCVBUF_SIZE)) {
   
            NettySystemConfig.socketRcvbufSize = 131072;
        }

        try {
   
            //PackageConflictDetect.detectFastjson();
            //命令行选项解析
            Options options = ServerUtil.buildCommandlineOptions(new Options());
            //解析命令栏中的 mqbroker
            commandLine = ServerUtil.parseCmdLine("mqbroker", args, buildCommandlineOptions(options),
                new PosixParser());
            if (null == commandLine) {
   
                System.exit(-1);
            }
            //相关配置的存储对象
            final BrokerConfig brokerConfig = new BrokerConfig();
            final NettyServerConfig nettyServerConfig = new NettyServerConfig();
            final NettyClientConfig nettyClientConfig = new NettyClientConfig();
            //是否使用TLS (TLS是SSL的升级版本,TLS是SSL的标准化后的产物,有1.0 1.1 1.2三个版本)
            nettyClientConfig.setUseTLS(Boolean.parseBoolean(System.getProperty(TLS_ENABLE,
                String.valueOf(TlsSystemConfig.tlsMode == TlsMode.ENFORCING))));
            //设置netty的服务端监听的端口 10911
            nettyServerConfig.setListenPort(10911);
            //消息存储相关的配置
            final MessageStoreConfig messageStoreConfig = new MessageStoreConfig();
            //如果Broker是Slave角色,消息占用内存大小的比率 比默认的40% 还要小 10%
            if (BrokerRole.SLAVE == messageStoreConfig.getBrokerRole()) {
   
                int ratio = messageStoreConfig.getAccessMessageInMemoryMaxRatio() - 10;
                //设置消息的内存最大占比,如果内存占比超过设定值,那么就进行置换
                messageStoreConfig.setAccessMessageInMemoryMaxRatio(ratio);
            }


           ......省略配置读取保存相关代码


            //创建BrokerController
            final BrokerController controller = new BrokerController(
                brokerConfig,
                nettyServerConfig,
                nettyClientConfig,
                messageStoreConfig);
            // remember all configs to prevent discard
            //缓存额外配置
            controller.getConfiguration().registerConfig(properties);
            //初始化BrokerController
            boolean initResult = controller.initialize();
            if (!initResult) {
   
                controller.shutdown();
                System.exit(-3);
            }
            //注册关闭的钩子方法
            Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
   
                private volatile boolean hasShutdown = false;
                private 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值