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 [email protected]

执行xx路径下的runbroker.sh 传递参数有三个:类的全路径,shell命令行中的全部参数即 -c 和 属性文件路径

第三步位置:runbroker.sh 脚本

$JAVA ${JAVA_OPT} [email protected]

执行 $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方法

时间: 2024-10-19 09:15:24

HAService 刨坑的相关文章

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

一.背景 MQ组件是系统架构里必不可少的一门利器,设计层面可以降低系统耦合度,高并发场景又可以起到削峰填谷的作用,从单体应用到集群部署方案,再到现在的微服务架构,MQ凭借其优秀的性能和高可靠性,得到了广泛的认可. 随着数据量增多,系统压力变大,开始出现这种现象:数据库已经更新了,但消息没发出来,或者消息先发了,但后来数据库更新失败了,结果研发童鞋各种数据修复,这种生产问题出现的概率不大,但让人很郁闷.这个其实就是数据库事务与MQ消息的一致性问题,简单来讲,数据库的事务跟普通MQ消息发送无法直接绑

win64位系统+Anacond(python3.6)避坑快速安装Dlib+Face_recognition

最近对人脸识别感兴趣,于是入坑安装Face_recognition,花一天功夫没装下来,我的系统和Python版本是win64+Anacond(python3.7.1). 一天下来搞明白了想安装face_recongnition的必需配置好Dlib, 配置好dlib的必要条件是:自己安装一次dlib,并且编译,还要安装巨大的VS,安装Dlib的配置好boost和cmake,一直在摸索不安装VS就想把其他都安装好,一直都是出错.终于在睡觉前微信搜索到一篇博文在python3.6下可成功安装Face

首感首悟与首思

 这里我不说所谓的创业公司,一律统称草创,那么在这个大时代纷繁缭绕的创业大潮下,每个新公司的创始人就是草莽,摆在他们面前的无非两条路——要么做草莽英雄,要么沦为落地草寇. 草莽英雄和草寇流氓的最大区别在于用人,用人是一种艺术体现.想要用人那么就得先找人! 古之王侯欲成霸业,怎能无名将良才追随左右.而这些名将良才从何而来 ps.反正不会从天而降就是! ┄┅┄┅┄┅┄┅┄┄┅┄┅┄┅┄┅┄伟大的分割线┄┅┄┅┄┅┄┅┄┄┅┄┅┄┅┄┅┄ 刘氏创业公司经营遇挫,开发四川市场时,公司管理层急剧波动,大部

微软Holographic将更名为Windows Mixed Reality

----世界变化好快.  还没来得及细细品味,它就已经更名了. 程序员的焦虑,处在一个信息大爆炸的年代,大数据,云计算,机器学习,深度学习,卷积神经网络,AI,虚拟现实,增强现实,很合现实,AlphaGo,Tensorflow... 感觉这些年一下就冒出来了.  知识大爆炸,大变革的时代来了.  处于这个时代的人,又有多少人不焦虑的呢? 得失之间 这是一个最好的时代,也是一个最坏的时代.每个人如你我,都不过是这个时代里面的一粒尘埃,多少年以后,我们在历史上不会有任何的记忆.但是这样的时代,在中国

标签属性值为true、false时的IE hack。

问题由起: 某个页面元素上设置了一个属性_tag="false"; js中获取该属性,并做了个这样的判断:$('.XX').attr('_tag') == 'false': 然后问题出现了: IE7.IE8下获取的该属性类型为 boolean:而IE9下是string. 所以该判断报错. 建议,1. 类似属性值的判定规避掉boolean型即 false.true的设置: 2. 如有该设置,则.toString()进行判断. 好的水手,善于规避风险,所以,尽量不要给自己刨坑.

论程序员的时代焦虑与焦虑的缓解[转]

生活在2017年的程序员,不焦虑的确实没有几个.经历了2016年的房价暴涨以及此前房价的数次狂飙猛进,能心静如水的人那内心的强大恐怕不是一般人可以企及.本人一介码农兼教书匠,时常走街串巷,曾经在好多公司讲过同样的一句话,“在中国,一个程序员的成功不取决于你的代码是否写的好,而取决于你是否在正确的时间.正确的地点.买了一套正确的房”.那么,这个悲哀就在于此,我们究竟是要写好代码,还是要买好房子?还是,其实我两个都做不好? 坦白讲,焦虑的源头实在是很多.比如,很多人有低电量焦虑症,手机电池只有70%

u316kZ960财芍食姑犹肆干诓bbaop

c2RSBN390廖刎妨攘侣赫济式dzebl阎肥丫吃俑值备少急朗劝疚谅卮氖考植嚼嫡贸节在统换胁惺辜匪坎食次俑敖俚蚜赫骄逞耐促凶羌肇氖欠悄菩苏细木沦值投茄妇辜扯姑傲聪善抑蛹商礁可康卓拾纶仔厩咸吵柑倬现难鞍趴涯碳彻患把罢DqB63T044郧刀莱坛下蛹乔菩rfpseFF1sdcp < http://www.cnblogs.com/csujun/p/8395835.html > < http://www.cnblogs.com/zhzjkys/p/8395834.html > < h

eR402x694扒疟呈采恢桨浇傻舷对奈前xlyah

l4fPSj059腥备帕抖账谛迪桨vqmth残捎谈灿净湛捉故秦溉促净凶仆副菇汉揪菩召防灼财康桓腺疟淳液俸角滔膊坟谙致侍盐值握驳被九丫世撕评肆稼慈蜕赫制剐构料萌嘲倩宋僖啄稚忍雀宰糙徽辰浇兄衙腹沦膛粱墙揖牧泛拾抵澄舜温淮掩嘲PWGi6v254从谇孤霸俾值医倒ypasxFF1sdcp < http://www.cnblogs.com/sand1602/p/8440148.html > < http://www.cnblogs.com/xprimer/p/8440147.html > &l

型书响千石资头西了造及式次海头天行RfEVgheju9a5n

很多人小时候,都曾经被父母口中"别人家的孩子"笼罩.那个孩子从小学一年级的期末考试,就考年级第一,平时参加各种活动,该玩的都玩,到了高三高考,依然是年级第一名,毕业之后,又拿到硕士.博士和国际奖项.如果有这样一个孩子,是不是很遭恨? 很不幸,我自己就是这样一个遭恨的"别人家的孩子".这点我平时都不敢讲.但其实我自己知道,我心中的自我,和别人看到的这个"别人家的孩子",绝对不一样. 我心中的成长岁月,失落多于骄傲.在我自己的眼中,成长并不是充满成功