韩学敏 2020-06-08
以web系统来说,一个聚合服务(购买请求) 对服务发送分别的请求(商品,订单,金额)方法,开启begin事务,但是不进行提交,返回结果(begin开启,commit未提交的状态)
如果成功则进行下一步,聚合服务返回要对应服务commit的请求,返回commit成功,由聚合服务对客户端返回成功
否则聚合服务发送请求回应rollback.
每个事务都会含有两个操作,一个是正常操作,一个是事务或者异常发生问题进行一个操作回滚
每个服务将自己对应数据库的事务进行操作,如果其中有一个异常则写入回滚
和tcc补偿事务有点像,在每个服务对应的数据库建立一个消息表
比如 商品 订单
首先对商品减1,将减1操作和操作该事务的行为写入,通过mq(或者其他中间件)让下一个事务进行消费,消费如果异常在一定范围之内重试,异常则进行回滚并通过mq让上一个事务进行回滚
每个事务开始操作和接受操作发送到mq进行是否事务成功,消费者接受mq信息对其操作
其中1-2步操作之间如果时间超过mq等待时间,会对所有的有1信息但是没有2里确定进行回调访问是否尝试or回滚,成功才会进行3-4
来源:
https://www.cnblogs.com/mayundalao/p/11798502.html
https://blog.csdn.net/wwd0501/article/details/90611671
https://www.ucloud.cn/yun/47411.html