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