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 刨坑的更多相关文章

  1. RocketMQ事务消息学习及刨坑过程

    一.背景 MQ组件是系统架构里必不可少的一门利器,设计层面可以降低系统耦合度,高并发场景又可以起到削峰填谷的作用,从单体应用到集群部署方案,再到现在的微服务架构,MQ凭借其优秀的性能和高可靠性,得到了 ...

  2. springboot+thymeleaf刨坑——首页加载js/css等失败解决方法

    在使用thymeleaf加载css或js样式,当我们进入登录页的时候发现,所有的样式都是加载失败的.原因是在新版中有这样一个坑……: 当我们设置了addInterceptors-注册拦截器的时候,通常 ...

  3. SQL这样干,你就是给自己刨坑.....

    SQL是作为一个程序员接触得非常多的一种语言,但是,很多时候,我们会发现,有些SQL的执行效率异常的差,造成了数据库的负担.我们通过分析这些有问题的SQL,就可以发现很多我们平时在写SQL的时候忽略的 ...

  4. Vue刨坑

    vue常见问题 1.在自定义组件里,你可以像任何普通元素一样用v-for.eg1: <my-component v-for="item in items"></m ...

  5. vue刨坑(二)

    vue实例 vue实例 每一个应用都是通过vue这个构造函数创建根实例(root instance),启动 new vue(选项对象) 需要传入选项对象,对象包含挂载元素,数据,模板,方法等. el: ...

  6. H5实现摇一摇技术总结

    摇一摇遇到的问题 一.如何对摇晃效果进行反馈 刚开始的处理方式是,摇晃过程中不做任何处理,但后来反馈说这种效果不好,好像就没有摇动一样,如果声音也不响的话,就真的和什么都没发生一样. 后来想了想,加入 ...

  7. robotium教材(一):robotium环境搭建

    博客Melon麦东=原创内容 目录: 1.基于无源码apk测试工程的搭建 2.基于有源码的测试工程搭建 3.遇到的问题(各种刨坑,各种尝试,网上水货回答真的太多,希望看见此文的同学你们是幸运的)   ...

  8. H5摇一摇遇到的问题

    一.如何对摇晃效果进行反馈 刚开始的处理方式是,摇晃过程中不做任何处理,但后来反馈说这种效果不好,好像就没有摇动一样,如果声音也不响的话,就真的和什么都没发生一样. 后来想了想,加入摇晃过程动画,就像 ...

  9. 吐血总结|史上最全的MySQL学习资料!!

    在日常工作与学习中,无论是开发.运维.还是测试,对于数据库的学习是不可避免的,同时也是日常工作的必备技术之一.在互联网公司,开源产品线比较多,互联网企业所用的数据库占比较重的还是MySQL. 在刚刚出 ...

随机推荐

  1. IP分片(IP Fragment)

    为什么要分片 不同的链路类型能够支持的最大传输单元值(MTU: Maxitum Transmission Unit)主要是由相关RFC文档规定的,常见的以太网链路的MTU值为1500,如果需要转发的I ...

  2. [转]Explorer.exe的命令行参数

    本文来自:Explorer.exe的命令行参数 摘要 本文讲述explorer.exe(资源管理器)的命令行. 语法 EXPLORER.EXE [/n][/e][,/root,<object&g ...

  3. Android TextView(EditView)文字底部或者中间 加横线

    Android TextView(EditView)文字底部或者中间 加横线 tv = (TextView) this .findViewById(R.id. text_view ); 中间加横线 t ...

  4. Sql Server 2016数据库生成带数据的脚本

    步骤:右键点击对应数据库->任务->生成脚本 在弹出的会话框中选择需要的对象,点击下一步,在设置和编写脚本选项中,点开高级按钮(如图)选择架构和数据点击确定就可以了. 提醒:如果你在数据库 ...

  5. PyQt5系列教程(三)用py2exe进行程序打包

    软硬件环境 Windows 10 Python 3.4.2 PyQt5 Py2exe 前言 在我们开发了完整的PyQt5项目后,一般都会将其打包成exe文件,方便其他人使用.今天我们就用Py2exe这 ...

  6. 学python着几个要搞清楚WSGI和uWSGI区别

    1 WSGI是一种通信协议 2 uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信. 3 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器.

  7. 什么是“堆”,"栈","堆栈","队列",它们的区别?

    堆:什么是堆?又该怎么理解呢? ①堆通常是一个可以被看做一棵树的数组对象.堆总是满足下列性质: ·堆中某个节点的值总是不大于或不小于其父节点的值: ·堆总是一棵完全二叉树. 将根节点最大的堆叫做最大堆 ...

  8. 可视化库-Matplotlib-散点图(第四天)

    1. 画基本的散点图 plt.scatterdata[:, 0], data[:, 1], marker='o', color='r', label='class1', alpha=0.4) np.r ...

  9. 跟我学算法-xgboost(集成算法)基本原理推导

    1.构造损失函数的目标函数 2.对目标函数进行泰勒展开 3.把样本遍历转换成叶子节点遍历,合并正则化惩罚项 4.求wj进行求导,使得当目标函数等于0时的wj的值 5.将求解得到的wj反导入方程中,解得 ...

  10. VLC播放RTSP视频延迟问题 (转)

    原帖地址:http://blog.chinaunix.net/uid-26611383-id-3755283.html ======================================== ...