Advertisement

RocketMQ | 源代码分析 | 消息交换

阅读量:

一、前言

前文阐述了消息从 Broker 到 MappedFile 内存缓冲区的详细路径;然而,在此之后的消息存储任务尚未完成, 因为尚未被写入文件中. 接下来我们将深入探讨 RocketMQ 的消息写入机制.

带着问题阅读

  1. 如何同步刷盘的?刷盘的流程是什么
  2. 刷盘的条件是什么?

二、刷盘策略

CommitLog在初始化的时候,会根据配置,启动两种不同的刷盘服务。

复制代码
    if (FlushDiskType.SYNC_FLUSH == defaultMessageStore.getMessageStoreConfig().getFlushDiskType()) {
      this.flushCommitLogService = new GroupCommitService();
    } else {
      this.flushCommitLogService = new FlushRealTimeService();
    }

同步操作是指当消息被追加至内存后立即完成并存储到文件中。
异步操作则是指当消息被追加至内存时,并非立即完成存储动作,
而是安排在后台任务中执行相应的操作。
RocketMQ系统默认优先采用异步操作策略。
当CommitLog在putMessage()方法处理完成后,
成功将

全部评论 (0)

还没有任何评论哟~