zoukankan      html  css  js  c++  java
  • 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方法

  • 相关阅读:
    网站安全检测
    Centos下Subversion 服务器安装配置
    报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost
    八个免费在线网站速度测试服务-分析影响网页加载因素提高网站访问速度
    Python处理HTML转义字符
    atitit.TokenService  token服务模块的设计
    Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结
    atitit.TokenService  token服务模块的设计
    Atitit.atijson 类库的新特性设计与实现 v3 q31
    Atitit.atijson 类库的新特性设计与实现 v3 q31
  • 原文地址:https://www.cnblogs.com/zno2/p/4607665.html
Copyright © 2011-2022 走看看