RocketMQ的事务
RocketMQ保证的是本地事务和发送消息这二者,要么都成功,要么都失败。
如何实现
producer端
producer发送一个“半消息”到broker
然后执行本地事务,调用endTransaction()
方法,根据执行结果发送单向rpc请求通知broker完成事务提交或者回滚
broker端
接收到消息根据消息类型,如果是“半消息”,则存放在单独队列中,并定时轮询这些消息去反查producer的本地事务的结果
接收到事务提交或回滚的通知,或者完成反查后,把“半消息”标记为已处理
如果提交,则把消息复制到其真正的主题和队列中去;如果回滚则直接结束事务。