SpringCloud Alibaba微服务实战三十二 - 集成RocketMQ实现分布式事务

Posted 飘渺Jam

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud Alibaba微服务实战三十二 - 集成RocketMQ实现分布式事务相关的知识,希望对你有一定的参考价值。

大家好,我是飘渺Jam,一名来自三流城市三流公司的三流程序员,本文是SpringCloud aliabab实战系列的第三十六篇, 欢迎关注!

前言

分布式事务是在微服务开发中经常会遇到的一个问题,之前的文章中我们已经实现了利用Seata来实现强一致性事务,其实还有一种广为人知的方案就是利用消息队列来实现分布式事务,保证数据的最终一致性,也就是我们常说的柔性事务。

消息队列实现分布式事务原理

首先让我们来看一下基于消息队列实现分布式事务的原理方案。

image-20210524104957603

发送消息的服务有个OUTBOX数据表,在进行INSERT、UPDATE、DELETE 业务操作时也会给OUTBOX数据表INSERT一条消息记录,这样可以保证原子性,因为这是基于本地的ACID事务。

OUTBOX表充当临时消息队列,然后我们在引入一个消息中继(MessageRelay)的服务,由他从OUTBOX表中读取数据并发布消息到消息组件。

消息中继的实现可以很简单,只需要通过定时任务定期从OUTBOX表中拉取最新未发布的数据,获取到数据后将数据发送给消息组件,最后将完成发送的消息从OUTBOX表中删除即可,对于失败的消息可以根据业务规则进行重试。

RocketMQ的事务消息

RocketMQ本身已经支持事务消息,如果你们项目使用了RocketMQ&#x

以上是关于SpringCloud Alibaba微服务实战三十二 - 集成RocketMQ实现分布式事务的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud Alibaba微服务实战三十一 - 业务日志组件

SpringCloud Alibaba微服务实战三十三 - 集成灰度发布

SpringCloud Alibaba微服务实战三十四 - 隐私接口禁止外部访问

SpringCloud Alibaba微服务实战三十六 - 这大概算是使用Feign的正确姿势。

SpringCloud Alibaba微服务实战三十七 - Oauth2自定义登录接口

SpringCloud Alibaba微服务实战三十七 - Oauth2自定义登录接口