MST

星途 面试题库

面试题:消息队列RocketMQ中分布式事务处理方案的核心机制是什么

请阐述RocketMQ分布式事务处理方案里,如半消息、消息回查等机制的作用和工作流程。
47.2万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

半消息

  1. 作用
    • 用于实现分布式事务的解耦。在分布式事务场景下,消息发送方(生产者)可能在本地事务执行前先发送半消息,这样即使本地事务还未提交,RocketMQ 也能接收并存储该消息,而消费者此时不会消费到该半消息,避免了本地事务未完成就进行消费处理可能导致的数据不一致问题。
  2. 工作流程
    • 发送半消息:生产者向 RocketMQ 发送半消息,此时消息处于“暂不能被消费”的状态。RocketMQ 接收到半消息后,会将其持久化并返回发送结果给生产者。
    • 本地事务执行:生产者根据半消息发送结果执行本地事务。如果半消息发送成功,则继续执行本地事务逻辑;若发送失败,则回滚整个分布式事务流程。
    • 提交或回滚半消息:本地事务执行完成后,生产者根据本地事务的执行结果向 RocketMQ 发送二次确认,即提交(COMMIT)或回滚(ROLLBACK)半消息。如果是提交半消息,RocketMQ 将该半消息标记为可消费状态,消费者就能正常消费;如果是回滚半消息,RocketMQ 将删除该半消息,消费者不会消费到。

消息回查

  1. 作用
    • 当 RocketMQ 长时间未收到生产者对半消息的二次确认(提交或回滚)时,通过消息回查机制来主动询问生产者本地事务的执行状态,以确保最终数据的一致性。防止因网络问题、生产者故障等原因导致半消息一直处于不确定状态,影响分布式事务的完整性。
  2. 工作流程
    • 开启回查定时器:RocketMQ 在收到半消息后,会启动一个定时器。如果在定时器设定的时间内未收到生产者的二次确认,就触发消息回查流程。
    • 回查请求发送:RocketMQ 向生产者发送消息回查请求,询问对应半消息关联的本地事务执行状态。
    • 本地事务状态查询:生产者收到回查请求后,根据回查消息中的相关信息(如消息 ID 等)查询本地事务的执行状态。
    • 二次确认响应:生产者将本地事务状态(COMMIT 或 ROLLBACK)返回给 RocketMQ,RocketMQ 根据生产者返回的结果进行相应处理,将半消息标记为可消费(COMMIT)或删除(ROLLBACK)。