文章中如果有图看不到,可以点这里去 csdn 看看。从那边导过来的,文章太多,没法一篇篇修改好。

RocketMQ 内容详解【五、事务与顺序消息线程机制】

第五章 · 事务与顺序消息线程机制

5.1 事务消息线程机制

RocketMQ 事务消息机制核心是 半消息(Half Message) + 本地事务 + 回查(Check)线程

5.1.1 半消息发送

  1. Producer 调用 sendMessageInTransaction()
  2. 消息写入 CommitLog,标记为 HALF 消息,暂时不可见。
  3. Broker 将 HALF 消息存储,等待 Producer 执行本地事务。
TransactionProducerBrokerCommitLogsendHalfMessage(msg)appendMessage(HALF)ackHalfackHalfTransactionProducerBrokerCommitLog

5.1.2 本地事务执行

  • Producer 调用本地事务方法执行业务逻辑。
  • 事务结果通知 Broker:COMMITROLLBACK
  • Broker 根据结果决定是否将半消息转为可见消息。
ProducerTransactionManagerBrokerConsumerexecuteLocalTransaction(msg)COMMIT / ROLLBACKcommitOrRollback(msgId)消息可见ProducerTransactionManagerBrokerConsumer

5.1.3 事务回查线程机制

  • Broker 启动 CheckTransactionService 定时扫描 HALF 消息。
  • 异常未提交消息,主动回查 Producer 状态。
  • 核心线程池:checkTransactionThreadPoolExecutor
  • 保证事务消息最终一致性。
BrokerCheckTransactionServiceProducerCommitLogscanHalfMessages()halfMsgListcheckLocalTransactionState(msg)COMMIT / ROLLBACKcommitOrRollback(halfMsg)BrokerCheckTransactionServiceProducerCommitLog

机制解析

  • 回查线程周期扫描半消息。
  • 回查线程池支持并发处理大量半消息。
  • 提供事务消息最终一致性,保障跨系统事务可靠。

5.2 顺序消息线程机制

5.2.1 Producer 顺序消息发送

  • Producer 根据业务 Key 计算 QueueId:queueId = hash(key) % N
  • 同一 Key 的消息发送到同一队列,保证顺序写入 CommitLog。
  • Broker 通过 单线程队列处理 + 锁机制 保证顺序消费。
ProducerBrokerCommitLogsend(msg, queueId=hash(key)%N)appendMessage(seq)ackProducerBrokerCommitLog

5.2.2 Consumer 顺序消费

  • Consumer 对每个队列使用单线程消费或顺序锁。
  • ProcessQueue 保存队列消息缓存。
  • 消费线程按队列顺序拉取消息,保证顺序消费。
ConsumerProcessQueueConsumeLockConsumeMessageCallbackfetchMessages(queueId)acquire()executeConsume(messages)release()ackMessage()ConsumerProcessQueueConsumeLockConsumeMessageCallback

机制解析

  • 顺序消费依赖队列单线程 + 消费锁。
  • PullMessageService 配合线程池保证并发消费不同队列。
  • 延迟重试消息会在保持队列顺序的前提下重新提交。

5.3 事务与顺序消息线程全景图

Producer顺序发送/事务发送
Broker接收消息
CommitLog顺序写入
逻辑队列索引
消费线程池
缓存队列
顺序消费锁
延迟队列重试线程
事务回查线程池

机制解析

  1. 事务消息

    • 半消息存储 → 本地事务执行 → 回查线程确认 → 转可见消息。
  2. 顺序消息

    • Producer 按 Key 选择队列 → Broker 顺序写入 → Consumer 单线程或锁顺序消费。
  3. 延迟队列

    • 消费失败消息进入重试 → 重新加入 ProcessQueue → 顺序或并发消费。
  4. 线程协作

    • 事务回查线程池、顺序消费锁、PullMessageService、消费线程池共同保证消息顺序、可靠性和最终一致性。

✅ 本章总结

  • 事务消息线程机制

    • 半消息 + 本地事务 + 回查线程池 → 保证最终一致性。
  • 顺序消息线程机制

    • 队列单线程 + 消费锁 + PullMessageService → 保证消息顺序。
  • 综合机制

    • 消息流从 Producer → Broker → CommitLog → ConsumeQueue → Consumer → ProcessQueue。
    • 延迟队列与事务回查线程并行运行,保证高可靠性和顺序性。
  • 终极全景图

    • 将事务、顺序、重试、延迟队列多线程协作机制一览无余。
posted @ 2025-09-18 16:09  NeoLshu  阅读(4)  评论(0)    收藏  举报  来源