个体工商户做网站,聊城房地产网站建设,易奇秀网站,网站开发产品规划要求Java项目《谷粒商城》架构师级Java项目实战#xff0c;对标阿里P6-P7#xff0c;全网最强
总时长 104:45:00 共408P
此文章包含第284p-第p290的内容 简介 模拟积分服务出异常#xff0c;前方的锁库存事务未回滚#xff0c;这时候就需要分布式事务
本地事务 事务的隔离…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使用最大努力通知型方法和可靠消息最终一致性方案下个视频继续