Seata解决分布式事务案例(三)

目录

测试分布式服务调用的事务问题

使用Seata对分布式事务进行管理


 

测试分布式服务调用的事务问题

 

紧接上篇https://blog.csdn.net/Delicious_Life/article/details/106987279

我们先来测试在三个微服务都正常的情况下,是否可以基于Feign实现事务的分布式操作

也就是说能否经过一顿操作,实现下单、减库存、更新金额、更改订单状态为已完成

 

我们先看下三个数据库的初始状态

Seata解决分布式事务案例(三)_第1张图片

我们在浏览器输入下面的请求访问

http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100

显示订单创建成功~

Seata解决分布式事务案例(三)_第2张图片

 此时我们看下三个数据库,全部正常做了修改~

Seata解决分布式事务案例(三)_第3张图片

 

 

下面我们再测试下当启动的某个服务遇到了问题,事务操作是否能同步执行~

我们在account微服务的service方法中设置延时20s执行 ,使用feign默认情况下延时大于1s即被认为服务出现异常。

此时,再次发起url请求,订单状态更改由于并没有在最后一步执行成功,因此status依然为0。此时订单状态为未完成,未完成account表的金额和storage的库存数却改变了,事务无法保证了~

Seata解决分布式事务案例(三)_第4张图片

 

 

使用Seata对分布式事务进行管理

 

只需要在2001微服务的service实现类上添加@GlobalTransactional注解即可,也就是说只需要在要执行事务操作的方法上添加该注解即可。

里面的参数“name”是你自定义的事务名称

Seata解决分布式事务案例(三)_第5张图片

但请求执行,首先三个数据库中的数据都没有做更新。前台效果是

Seata解决分布式事务案例(三)_第6张图片

控制台效果是 

Seata解决分布式事务案例(三)_第7张图片

但这个异常被seata接受到了,seata的事务管理器进行回滚操作而非更新操作~

 

使用Seata处理事务问题只会出现两种情况。要么分布式事务正常执行成功,数据库操作均生效。要么事务执行失败,所有数据库均为变化~ 

你可能感兴趣的:([SpringCloud,Alibaba])