MST

星途 面试题库

面试题:消息队列之RocketMQ事务消息的实现细节

在RocketMQ事务消息的实现中,如何保证事务消息的最终一致性?请详细说明RocketMQ采用的机制和策略。
31.2万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试
  1. 事务消息发送流程
    • 半消息发送:生产者先发送一条半消息(Half Message)到RocketMQ Broker。半消息对消费者不可见。此时生产者执行本地事务。
    • 本地事务执行:生产者执行本地业务逻辑,完成数据库操作等本地事务。
    • 事务状态回查
      • 如果生产者未向Broker发送Commit或Rollback消息,或者发送的消息超时未到达Broker,Broker会定时回查生产者本地事务状态。
      • 生产者收到回查请求后,会根据本地事务执行结果返回Commit或Rollback状态给Broker。
  2. 保证事务最终一致性的机制和策略
    • 半消息隔离:半消息对消费者不可见,只有当消息被标记为Commit状态后,消费者才能消费。这样避免了在本地事务未完成时消息被错误消费。
    • 本地事务状态回查:Broker通过回查机制确保能获取到本地事务最终状态。即使生产者因为某些原因(如网络问题、应用故障等)未能及时向Broker反馈事务状态,Broker也能主动询问,从而决定对消息是Commit还是Rollback。
    • 重试机制
      • 对于事务状态回查,如果生产者处理回查请求失败,Broker会根据配置进行多次重试。这保证了即使生产者在处理回查请求时短暂出现问题,最终也能确定事务消息的状态。
      • 对于消息消费,如果消费者消费消息失败,RocketMQ支持设置重试策略,如重试次数、重试间隔等,以确保消息最终能被成功消费,从而保证事务最终一致性。