RocketMQ 内容详解【五、事务与顺序消息线程机制】
第五章 · 事务与顺序消息线程机制
5.1 事务消息线程机制
RocketMQ 事务消息机制核心是 半消息(Half Message) + 本地事务 + 回查(Check)线程。
5.1.1 半消息发送
- Producer 调用
sendMessageInTransaction()。 - 消息写入 CommitLog,标记为 HALF 消息,暂时不可见。
- Broker 将 HALF 消息存储,等待 Producer 执行本地事务。
5.1.2 本地事务执行
- Producer 调用本地事务方法执行业务逻辑。
- 事务结果通知 Broker:
COMMIT或ROLLBACK。 - Broker 根据结果决定是否将半消息转为可见消息。
5.1.3 事务回查线程机制
- Broker 启动 CheckTransactionService 定时扫描 HALF 消息。
- 异常未提交消息,主动回查 Producer 状态。
- 核心线程池:
checkTransactionThreadPoolExecutor。 - 保证事务消息最终一致性。
机制解析:
- 回查线程周期扫描半消息。
- 回查线程池支持并发处理大量半消息。
- 提供事务消息最终一致性,保障跨系统事务可靠。
5.2 顺序消息线程机制
5.2.1 Producer 顺序消息发送
- Producer 根据业务 Key 计算 QueueId:
queueId = hash(key) % N。 - 同一 Key 的消息发送到同一队列,保证顺序写入 CommitLog。
- Broker 通过 单线程队列处理 + 锁机制 保证顺序消费。
5.2.2 Consumer 顺序消费
- Consumer 对每个队列使用单线程消费或顺序锁。
- ProcessQueue 保存队列消息缓存。
- 消费线程按队列顺序拉取消息,保证顺序消费。
机制解析:
- 顺序消费依赖队列单线程 + 消费锁。
- PullMessageService 配合线程池保证并发消费不同队列。
- 延迟重试消息会在保持队列顺序的前提下重新提交。
5.3 事务与顺序消息线程全景图
机制解析:
-
事务消息:
- 半消息存储 → 本地事务执行 → 回查线程确认 → 转可见消息。
-
顺序消息:
- Producer 按 Key 选择队列 → Broker 顺序写入 → Consumer 单线程或锁顺序消费。
-
延迟队列:
- 消费失败消息进入重试 → 重新加入 ProcessQueue → 顺序或并发消费。
-
线程协作:
- 事务回查线程池、顺序消费锁、PullMessageService、消费线程池共同保证消息顺序、可靠性和最终一致性。
✅ 本章总结
-
事务消息线程机制:
- 半消息 + 本地事务 + 回查线程池 → 保证最终一致性。
-
顺序消息线程机制:
- 队列单线程 + 消费锁 + PullMessageService → 保证消息顺序。
-
综合机制:
- 消息流从 Producer → Broker → CommitLog → ConsumeQueue → Consumer → ProcessQueue。
- 延迟队列与事务回查线程并行运行,保证高可靠性和顺序性。
-
终极全景图:
- 将事务、顺序、重试、延迟队列多线程协作机制一览无余。
本文来自博客园,作者:NeoLshu,转载请注明原文链接:https://www.cnblogs.com/neolshu/p/19120311

浙公网安备 33010602011771号