说一下 RocketMQ 中关于事务消息的实现?

面试

RocketMQ的事务消息可以认为是一个两阶段提交,在事务开始的时候发送一个半消息给Broker。 半消息就是这个消息此时对Consumer是不可见的,也不会存在正常的队列中,而是一个特除队列。发送玩半消息 后,执行本地事务,根据本地事务的结果决定是向Broker发送:提交消息还是回滚消息。并且Broker会定时的向 Producer反查这个事务是否成功。 RocketMQ事务消息的执行流程:

(1)Producer发送半消息到Broker中,等待响应

(2)Producer执行本地事务

(3)Broker获取本地事务的结果,判断是发送消息还是回滚事务

(4) Broker如果是回滚事务,则执行回滚操作并删除消息

(5)Broker如果是发送消息,则把消息放到正常队列,供Consumer消费

(6)Consumer拿到消息,执行本地事务

(7)Consumer返回消息响应结果给Broker

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐