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方法
HAService 刨坑的更多相关文章
- RocketMQ事务消息学习及刨坑过程
一.背景 MQ组件是系统架构里必不可少的一门利器,设计层面可以降低系统耦合度,高并发场景又可以起到削峰填谷的作用,从单体应用到集群部署方案,再到现在的微服务架构,MQ凭借其优秀的性能和高可靠性,得到了 ...
- springboot+thymeleaf刨坑——首页加载js/css等失败解决方法
在使用thymeleaf加载css或js样式,当我们进入登录页的时候发现,所有的样式都是加载失败的.原因是在新版中有这样一个坑……: 当我们设置了addInterceptors-注册拦截器的时候,通常 ...
- SQL这样干,你就是给自己刨坑.....
SQL是作为一个程序员接触得非常多的一种语言,但是,很多时候,我们会发现,有些SQL的执行效率异常的差,造成了数据库的负担.我们通过分析这些有问题的SQL,就可以发现很多我们平时在写SQL的时候忽略的 ...
- Vue刨坑
vue常见问题 1.在自定义组件里,你可以像任何普通元素一样用v-for.eg1: <my-component v-for="item in items"></m ...
- vue刨坑(二)
vue实例 vue实例 每一个应用都是通过vue这个构造函数创建根实例(root instance),启动 new vue(选项对象) 需要传入选项对象,对象包含挂载元素,数据,模板,方法等. el: ...
- H5实现摇一摇技术总结
摇一摇遇到的问题 一.如何对摇晃效果进行反馈 刚开始的处理方式是,摇晃过程中不做任何处理,但后来反馈说这种效果不好,好像就没有摇动一样,如果声音也不响的话,就真的和什么都没发生一样. 后来想了想,加入 ...
- robotium教材(一):robotium环境搭建
博客Melon麦东=原创内容 目录: 1.基于无源码apk测试工程的搭建 2.基于有源码的测试工程搭建 3.遇到的问题(各种刨坑,各种尝试,网上水货回答真的太多,希望看见此文的同学你们是幸运的) ...
- H5摇一摇遇到的问题
一.如何对摇晃效果进行反馈 刚开始的处理方式是,摇晃过程中不做任何处理,但后来反馈说这种效果不好,好像就没有摇动一样,如果声音也不响的话,就真的和什么都没发生一样. 后来想了想,加入摇晃过程动画,就像 ...
- 吐血总结|史上最全的MySQL学习资料!!
在日常工作与学习中,无论是开发.运维.还是测试,对于数据库的学习是不可避免的,同时也是日常工作的必备技术之一.在互联网公司,开源产品线比较多,互联网企业所用的数据库占比较重的还是MySQL. 在刚刚出 ...
随机推荐
- TCP/IP详解与OSI七层模型
TCP/IP协议 包含了一系列构成互联网基础的网络协议,是Internet的核心协议.基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层.网络层.传输层和应用层.下图表示TCP/IP模型与 ...
- 一:线性dp
概念: 动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法. 动态规划是通过拆分问题,定义问题状态和状态之间的关系使得问题能够以递推(或者说分治)的方法去解决. 解决策略: 1)最优化原理:如 ...
- js中caller和callee属性详解
一.caller属性返回一个对函数的引用,该函数调用了当前函数.functionName.callerfunctionName 对象是所执行函数的名称.说明对于函数来说,caller 属性只有在函数执 ...
- winform 勾选可以改变框控件
public partial class UCCheck : UserControl { [Browsable(true), Category("修改属性"), Descripti ...
- unity里面的gameobject和transform的关系
一切都是物体(gameobject),而transform是物体的一个基本属性类,包含位置,旋转,缩放,三个基本属性,两者之间可以互相转换 查找物体,建议用transform,GameObject无法 ...
- php 连接redis
怎么安装 配置就不说了 最简单的连接方式 <?php //Connecting to Redis server on localhost $redis = new Redis(); $redis ...
- java HttpClient 获取页面Cookie信息
HttpClient client = new HttpClient(); GetMethod get=new GetMethod("http://www.baidu.com"); ...
- RTNETLINK answers: File exists
问题: 重启网络时报错如下 >>/etc/init.d/network start RTNETLINK answers: File exists 分析: /etc/init.d/netwo ...
- 爬虫之requests与bautifullSoup
requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作, ...
- 无法正确解析FreeMarker视图
在使用SpringMVC处理FreeMarker的时候,出现了无法解析视图名的问题,报的异常说明的也非常清楚就是不能解析视图 这个free就是一个FreeMarker的模板名,它的完整路径是/WEB- ...