RocketMQ4.9.1源码解析-(HA模块)主从Slave上报与消息处理

本文详细解析RocketMQ 4.9.1版本中,Slave在高可用(HA)模式下的工作原理,包括Slave如何连接Master、定期汇报offset以及处理来自Master的同步数据。在HAClient类中,重点讨论了Slave与Master建立连接、汇报offset和处理同步数据的实现细节,如连接Master的过程、offset汇报机制以及如何将未同步消息写入本地commitlog文件。
摘要由CSDN通过智能技术生成

接着上一篇 RocketMQv4.9.1源码分析-HA主从 Master读写处理 解答了Master相关的问题,这篇文章围绕Slave相关的一些问题继续看代码。

对于slave,我们有如下一些疑惑:

  1. slave如何获取master的路由信息
  2. slave如何向master报告offset
  3. slave如何处理master同步的数据

在整体的类图布局中,slave相关的代码都在HAClient类中

HAClient

HAClient部分是Slave处理的核心,其中包括三部分:

  1. slave与master建立连接
  2. slave向master汇报同步进度
  3. slave接收master的同步数据并处理

HAClient 启动

之前提到了,HAClient启动的触发时机是HAService启动的方法中,在store/src/main/java/org/apache/rocketmq/store/ha/HAService.start()中。

// HAService 启动
public void start() throws Exception {
    this.acceptSocketService.beginAccept();
    this.acceptSocketService.start();
    this.groupTransferService.start();
    this.haClient.start();
}
复制代码

HAClient的启动代码在store/src/main/java/org/apache/rocketmq/store/ha/HAService$HAClient.run()路径下。

其中3个核心的步骤在代码注释中有进行标记

@Override
public void run() {
    log.info(this.getServiceName() + " service started");

    while (!this.isStopped()) {
        try {
            // 步骤一:连接到master
            if (this.connectMaster()) {
                // 步骤二:如果距离上次报告的时间间隔到了最大等待时间,立刻执行一次报告
                if (this.isTimeToReportOffset()) {
                    // 报告slave offset
                    boolean result = this.reportSlaveMaxOffset(this.currentReportedOffset);
                    if 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值