Seata案例-异常模拟|学习笔记

简介: 快速学习Seata案例-异常模拟

开发者学堂课程【全面讲解Spring Cloud Alibaba技术栈(知识精讲+项目实战)第五阶段Seata案例-异常模拟】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/687/detail/11929


Seata案例-异常模拟


内容介绍

一、课时总述

二、异常模拟过程


一、课时总述

已经完成了下订单和扣除库存两方面代码的编写,在最后的测试案例

中会发现如果中间不发生任何的异常,出现对应的请求订单表中可以

写入一条订单,然后在商品库存中是可以对应地减去相应的库存,整

个的业务流程是没有任何问题的。

一旦在这个过程中发生了异常,会出现何种情况,对应的表格中的数

据是否能保持最终的一致性。

下面就通过自主模拟异常的方式来测试一下在下单的过程中一旦发

生异常,表格中的数据会有怎样的变化。


二、异常模拟过程

接下来在商品表中找到对应的扣除库存的地方,在扣除库存的位置直

接模拟一个异常,为了更加安全就添加一个事务的控制。

重新启动 product,等到启动完毕就再次刷新来看一下数据库的状

况。为了观察的更为清晰,在此设置两个断点,第二个断点设置在下

单的业务中。两个微服务均已经调用了,接着对数据库进行刷新。而

后就触发一次新的下单,随后顺着代码执行观察一下断点的状况。之

后就要调用远程的订单服务扣减库存。

现在断点已经位于订单数据库中了,对此刷新一下数据库观察一下状

况。现在发现数据库之中已经写入了一条订单,对应的一份扣库存仍

未进行。

image.png

异常一旦发生,后面的操作就无法执行了,这就意味着扣除库存的操

作已经无法完成了。

这样一个分布式事务的问题就被模拟出来了。对应的订单已经下单,

然而对应的库存却未做减法。这就是明显的一个分布式事务问题。把

分布式事务模拟出来后的任务就是如何利用 Seata 解决分布式事务

中的问题。

代码如下

@Override

publicvoidreduceInventory(Integerpid,Integernumber){

productproduct=productDao.findById(pid).get();

if(product.getStock()<number)

thrownewRuntimeException(“库存不足”)

}

inti=1/0

product.setStock(product.getStock()-number)

productDao.save(product)

相关文章
|
6月前
|
Nacos 数据库 开发者
Seata回滚问题之异常如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
489 12
|
6月前
|
数据库 开发者
Seata调用问题之全局异常捕获没法回滚如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
508 7
|
6月前
|
SQL API 数据库
Seata AT模式问题之抛出异常触发回滚如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题
553 10
|
6月前
|
SQL Oracle 关系型数据库
seata版本问题之码云拉取代码异常如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
276 6
|
6月前
|
监控 数据库
在Seata中一张表使用了联合主键,在事务回滚时报异常,改为单个主键,就没有这个异常,如何解决?
在Seata中一张表使用了联合主键,在事务回滚时报异常,改为单个主键,就没有这个异常,如何解决?
|
6月前
|
Kubernetes 关系型数据库 MySQL
seata启动问题之指针异常如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
267 6
|
6月前
|
Oracle 安全 Java
Seata常见问题之启动seata一直报空指针异常如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
|
6月前
|
Java 数据库连接 API
seata回滚问题之全局异常如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
934 9
|
6月前
|
Java Nacos Sentinel
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
804 0
|
6月前
|
SQL SpringCloudAlibaba 中间件
SpringCloud Alibaba Seata处理分布式事务--学习笔记
SpringCloud Alibaba Seata处理分布式事务--学习笔记
75 0