怎么建立图片的网站吗营销型类型网站多少钱些
Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强
总时长 104:45:00 共408P
此文章包含第284p-第p290的内容
简介


模拟积分服务出异常,前方的锁库存事务未回滚,这时候就需要分布式事务
 
 
 
本地事务

 
事务的隔离级别


 spring 调整隔离级别 使用@Transactional的isolation属性
 
 
事务的传播行为

 
 下图的情况 报错后 a和b一起回滚 c因为开了一个新事务,所以不回滚
 
 使用required了,它的其他配置就无用,就是使用他的共用的那个事务的配置
 
 
 坑!!!切记 这里的abc三个方法都在一个类里面 这样会导致跳过代理 导致b和c的@Transactional失效,修改的话 使用xxxService.b()这样可以,或者使用下面的方法
 
 
 解决方法:
- 引入aop场景



 

 使用代理对象来调用
 
分布式事务

 
CAP定理和BASE定理


 这三者无法同时实现 只能是cp ap 或 ac(基本无法实现ac)
 
使用算法保持一致性 cp

 动画
 
 
 发生错误后没提交的数据都进行回滚 然后复制新领导的命令日志进行操作
一般我们都使用a和p
 
base理论

最终一致性

 
 例如 这里库存已经扣了,但是订单和积分已经回滚了 过一段时间发现没有这个订单(或 生成订单 但订单状态已关闭) 这样的话再把库存加回去
分布式事务的几种方案
2pc模式

 
 
tcc事务补偿方案(TCC补偿 这个阿里在用)
相当于自己写回滚逻辑(如库存加了2个,进到cancel逻辑就要减2) 缺点:侵入式太强
 
 
最大努力通知型方法

 如支付宝支付成功后 会一直发给订单模块 告诉他已经支付成功了,直到订单模块执行完业务,并且返回通知(知道了,我已经执行完了)给支付宝,支付宝才停止发送通知
 
可靠消息+最终一致性方案

seata

 
 
 


这个表相当于一个操作的日志的暂存器(改之前先记录一下) 将事务执行之前的数据存在里面,如果事务失败了 则回滚回去(魔改数据库)

每个数据库都加了这个回滚日志表



 



seata示例


 
不想找bug就用老师的版本的,新版本完全不一样了

 

seata1.4.2可以在配置文件里配置,以 seata 开头,下面就会有配置信息的提示

springboot2.0以下可以用
 
 注意:在Seata0.9版本以后,提供了DataSource默认代理的功能,并且默认是开启的,不用再手动的去把DataSource放入到DataSourceProxy中了


 seata依赖引到common里面的 其他模块记得排除不然启动不了
 seata无法使用在高并发场景,因为加了很多锁,相当于把并发变成了串口化了,所以这里我们在高并发场景不使用seata,使用最大努力通知型方法和可靠消息+最终一致性方案,下个视频继续
