RocketMQ如何实现事务

Posted by KANG's BLOG on Tuesday, March 15, 2022

RocketMQ的事务

RocketMQ保证的是本地事务和发送消息这二者,要么都成功,要么都失败。

如何实现

producer端

producer发送一个“半消息”到broker

然后执行本地事务,调用endTransaction()方法,根据执行结果发送单向rpc请求通知broker完成事务提交或者回滚

broker端

接收到消息根据消息类型,如果是“半消息”,则存放在单独队列中,并定时轮询这些消息去反查producer的本地事务的结果

接收到事务提交或回滚的通知,或者完成反查后,把“半消息”标记为已处理

如果提交,则把消息复制到其真正的主题和队列中去;如果回滚则直接结束事务。