从这一章开始,着手来试着分析RocketMQ的源码。本人fork了源码,准备将读过的代码都加上注释,附上项目地址。首先看下源码结构,RocketMQ共包含9个核心模块:
- rocketmq-broker
- rocketmq-client
- rocketmq-common
- rocketmq-filtersrv
- rocketmq-namesrv
- rocketmq-remoting
- rocketmq-srvutil
- rocketmq-store
- rocketmq-tools
先不管每个模块的作用,后面都会涉及到。本来想从rocketmq-namesrv项目开始,瞄了一眼启动代码,其中用到了rocketmq-srvutil项目,这个项目只有一个类,而且挺简单的,比较容易开头。
项目作用
该项目的作用是提供了处理命令行参数的功能,而且只有一个类ServerUtil。其中用了org.apache.commons.cli工具,关于cli有同学可能没怎么接触过,那么先来了解下。
CLI
CLI即Command Line Interface,也就是命令行接口,它为Java程序访问和解析命令行参数提供了一种统一的接口,不需要再遍历main函数中的String[] args参数了。随便建个项目跑跑几个测试就会用了,RocketMQ引用的版本是1.2,我们就拿这个版本来试试,直接看代码:
|
|
运行时添加参数-c china -t nothing,运行结果如下:
对照注释和输出,也没啥好解释的了。
ServerUtil类
该类中也没几个方法,我们就一个个来看下。
buildCommandlineOptions方法
该方法的作用就是添加帮助信息和Name Server地址信息参数:
parseCmdLine方法
该方法的作用是通过参数和Parser类型来构造CommandLine,并且如果参数有-h,则打印帮助信息。
printCommandLineHelp方法
该方法的作用仅仅是打印命令行帮助信息,代码简单就不贴出来了。
commandLine2Properties方法
该方法的作用是把参数转成java.util.Properties类,代码简单就不贴出来了。
rocketmq-srvutil子项目的源码就到这些了。