当前位置: 首页 > news >正文

谷粒商城实战(024 业务-订单模块-分布式事务1)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强

总时长 104:45:00 共408P

此文章包含第284p-第p290的内容


简介

在这里插入图片描述

在这里插入图片描述

模拟积分服务出异常,前方的锁库存事务未回滚,这时候就需要分布式事务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本地事务

在这里插入图片描述
在这里插入图片描述

事务的隔离级别

在这里插入图片描述

在这里插入图片描述
spring 调整隔离级别 使用@Transactional的isolation属性
在这里插入图片描述
在这里插入图片描述

事务的传播行为

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

  1. 引入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,使用最大努力通知型方法和可靠消息+最终一致性方案,下个视频继续


http://www.lryc.cn/news/349807.html

相关文章:

  • .NET使用Microsoft.IdentityModel.Tokens对SAML2.0登录断言校验
  • 性能测试学习二
  • 小丑的身份证和复印件 (BFS + Floyd)
  • C++类与对象(上)
  • Exchanger的 常用场景及使用示例
  • Spring AI项目Open AI对话接口开发指导
  • 决策规划仿真平台的搭建
  • RustGUI学习(iced/iced_aw)之扩展小部件(十八):如何使用badge部件来凸显UI元素?
  • 触摸播放视频,并用iframe实现播放外站视频
  • 接口自动化-requests库
  • 队列的实现与OJ题目解析
  • 中北大学软件学院javaweb实验三JSP+JDBC综合实训(一)__数据库记录的增加、查询
  • 高通QCS6490开发(一): 广翼智联FV01 AI板卡简介
  • 【知识拓展】大白话说清楚:IP地址、子网掩码、网关、DNS等
  • Java 高级面试问题及答案2
  • 2024年网络安全威胁
  • 应用层之 HTTP 协议
  • 解决Word文档中页眉有部分有,有部分没有的问题
  • Python爬虫基础知识学习(以爬取某二手房数据、某博数据与某红薯(书)评论数据为例)
  • JavaScript-输入输出语句
  • peft+llama3训练自定义数据
  • vue+ts+vite+pinia+less+echarts 前端可视化 实战项目
  • 文心一言指令多样化,你知道的有哪些?
  • QT状态机8-使用恢复策略自动恢复属性
  • 第83天: 代码审计-PHP 项目RCE 安全调试追踪代码执行命令执行
  • 学习Uni-app开发小程序Day8
  • OpenHarmony标准设备应用开发(二)——布局、动画与音乐
  • mysql字段乱序 information_schema
  • 使用php和redis实现分布式锁
  • 大龄程序员是否要入职嵌入式python岗位?