HAService 刨坑
High availability is a characteristic of a system, which describes the duration (length of time) for which the system is operational.
HAService.java 即高可用性服务,负责同步双写,异步复制功能。
线索
- 实例化
- 启动服务
1. HAConnection
HA服务,Master用来向Slave Push数据,并接收Slave应答
ReadSocketService 读数据线程服务
WriteSocketService 写数据线程服务
日志为
RocketmqStore -> store.log
2. AcceptSocketService
AcceptSocketService 继承了抽象类ServiceThread
ServiceThread 实现了Runnable接口并且在构造函数中this.thread = new Thread(this, this.getServiceName());
该抽象类还存在start方法,用来启动线程this.thread.start();
当继承该抽象类的AcceptSocketService 的实例调用父类start方法时,即可启动本类的run方法
在run方法中创建HAConnection
3. HAService
HAService 的构造方法中 new AcceptSocketService
4. DefaultMessageStore
DefaultMessageStore 的构造方法中 new HAService
5. BrokerController
BrokerController 的initialize() 方法中new DefaultMessageStore
6. BrokerStartup
BrokerStartup 的main方法中 new BrokerController ,其实例调用了initialize()
正向流程为:
第一步位置:shell 窗口
sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties &
执行shell脚本mqbroker 传递参数有两个:-c 和 属性文件路径
第二步位置:mqbroker文件
sh ${ROCKETMQ_HOME}/bin/runbroker.sh com.alibaba.rocketmq.broker.BrokerStartup $@
执行xx路径下的runbroker.sh 传递参数有三个:类的全路径,shell命令行中的全部参数即 -c 和 属性文件路径
第三步位置:runbroker.sh 脚本
$JAVA ${JAVA_OPT} $@
执行 $JAVA_HOME/bin/java 命令,且参数有${JAVA_OPT} 和 上一步中shell命令行的所有参数
即:java [-options] class [args...]
第四步位置:BrokerStartUp.class 类文件
public static void main(String[] args) { start(createBrokerController(args)); }
启动java虚拟机,执行BrokerStartUp.class的main函数,String[] args参数为 -c 和 属性文件路径。
创建BrokerController过程中涉及到解析属性文件。
new BrokerController 并调用其 initialize() 然后执行其start()
第五步位置:BrokerController.class 类
在 initialize() 方法中 new DefaultMessageStore
DefaultMessageStore 构造方法中 new HAService
HAService 构造方法中 new AcceptSocketService
第六步位置:BrokerStartup.class 文件
执行其 start() ,见第五步删除线部分
调用 controller.start();
第七步位置:BrokerController.class 类文件
该类 start() 方法中调用this.messageStore.start();
第八步位置:DefaultMessageStore.class 文件
该类的start() 方法中调用HAService实例的方法start();
第九步位置:HAService.class 文件
改类中调用start()方法调用 AcceptSocketService.start();
第十步位置:AcceptSocketService.class 类
执行start父类start方法,最终运行run方法