MST

星途 面试题库

面试题:消息队列中RocketMQ事务消息实现的核心步骤有哪些

请阐述在RocketMQ中实现事务消息的主要步骤,包括消息发送阶段、本地事务执行阶段以及事务状态回查阶段的具体操作和交互逻辑。
26.4万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

消息发送阶段

  1. 发送半消息:生产者调用 sendMessageInTransaction 方法向 RocketMQ 发送半消息(Half Message)。半消息对消费者不可见。
  2. MQ 响应:RocketMQ 接收到半消息后,会检查消息合法性等,若成功则返回响应给生产者,表明半消息发送成功。

本地事务执行阶段

  1. 执行本地事务:生产者在收到半消息发送成功的响应后,执行本地事务逻辑(如数据库操作等业务逻辑)。
  2. 返回事务状态:本地事务执行完成后,根据执行结果向 RocketMQ 返回三种事务状态之一:
    • LocalTransactionState.COMMIT_MESSAGE:表示本地事务执行成功,RocketMQ 会将半消息标记为可投递状态,供消费者消费。
    • LocalTransactionState.ROLLBACK_MESSAGE:表示本地事务执行失败,RocketMQ 会删除半消息,消费者不会消费到该消息。
    • LocalTransactionState.UNKNOW:表示本地事务状态不确定,RocketMQ 会进入事务状态回查阶段。

事务状态回查阶段

  1. MQ 发起回查:当 RocketMQ 长时间未收到确定的事务状态(如返回 LocalTransactionState.UNKNOW )时,会主动向生产者发起事务状态回查请求。
  2. 生产者处理回查:生产者收到回查请求后,会根据本地事务执行记录,再次确定本地事务执行状态,并再次向 RocketMQ 返回上述三种事务状态之一。
  3. MQ 处理回查结果:RocketMQ 根据生产者返回的回查结果,执行相应操作,如标记消息可投递或删除消息等。