面试题答案
一键面试消息发送
- 半消息发送:生产者向RocketMQ发送半消息(Half Message),该消息对消费者不可见。RocketMQ接收到半消息后,会持久化该消息并返回成功响应。这样做可以确保消息已经进入到MQ系统,为后续事务流程奠定基础。
- 消息持久化:RocketMQ通过其存储机制,将半消息持久化到磁盘,保证在服务器故障等情况下消息不会丢失,为事务一致性提供底层存储保障。
本地事务执行
- 执行本地事务:生产者在发送半消息成功后,执行本地事务。这一步涉及到对业务数据的操作,比如数据库的增删改等。
- 本地事务状态反馈:本地事务执行完成后,生产者会根据本地事务的执行结果向RocketMQ发送Commit或Rollback消息。如果本地事务执行成功,发送Commit消息,此时半消息会转变为可消费的消息;如果本地事务执行失败,发送Rollback消息,RocketMQ会删除之前存储的半消息。
消息回查
- 回查机制触发:如果RocketMQ在一段时间内没有收到生产者发送的Commit或Rollback消息(即本地事务状态不确定),RocketMQ会主动向生产者发起消息回查。
- 生产者处理回查:生产者接收到回查请求后,会根据本地事务的实际执行状态再次向RocketMQ发送Commit或Rollback消息。生产者可以通过查询本地事务日志等方式来确定本地事务的最终状态。
- 确保最终一致性:通过消息回查机制,RocketMQ能够在本地事务状态不明的情况下,主动询问生产者,从而保证事务消息最终能够处于确定状态(Commit或Rollback),进而保证分布式事务的最终一致性。