当前位置: 首页 > 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,使用最大努力通知型方法和可靠消息+最终一致性方案,下个视频继续


相关文章:

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

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第284p-第p290的内容 简介 模拟积分服务出异常,前方的锁库存事务未回滚,这时候就需要分布式事务 本地事务 事务的隔离…...

.NET使用Microsoft.IdentityModel.Tokens对SAML2.0登录断言校验

如题。使用SAML单点登录对IDP返回的Response断言使用微软提供的Microsoft.IdentityModel.Tokens对断言(Assertion)进行校验。 首先需要安装Muget包,Microsoft.IdentityModel.Tokens和Microsoft.IdentityModel.Tokens.Saml。 简易示例代码如…...

性能测试学习二

瓶颈的精准判断 TPS曲线 tps图 响应时间图 拐点在哪里呢? 这是一个阶梯式增加的场景,拐点在第二个压力阶梯上就出现了,因为响应时间增加了,tps增加的却不多,在第三个阶段时,tps增加的就更少了,响应时间也在不断增加,所以性能瓶颈在加剧,越往后越明显【tps的增长,…...

小丑的身份证和复印件 (BFS + Floyd)

本题链接:登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 2 10 (JOKERjoke #####asdr) 输出 12 思路: 根据题意,要求最短时间,实际上也可以理解为最短距离。 所以应该联想到有关最短距离的算法&…...

C++类与对象(上)

C类与对象 面向过程和面向对象初步认识类的引入类的定义类的两种定义方式: 类的访问限定符及封装访问限定符 封装类的作用域类的实例化类对象模型如何计算类对象的大小结构体内存对齐规则: this指针 面向过程和面向对象初步认识 C语言是面向过程的&…...

Exchanger的 常用场景及使用示例

Exchanger的 常用场景及使用示例 Exchanger是Java并发包中的一个工具类,它用于两个线程之间交换数据。当两个线程都到达同步点并调用exchange()方法时,它们会交换数据然后继续执行。Exchanger特别适用于那些需要两个线程进行协作,交换数据或…...

Spring AI项目Open AI对话接口开发指导

文章目录 创建Spring AI项目配置项目pom、application文件controller接口开发接口测试 创建Spring AI项目 打开IDEA创建一个新的spring boot项目,填写项目名称和位置,类型选择maven,组、工件、软件包名称可以自定义,JDK选择17即可…...

决策规划仿真平台的搭建

以下内容笔记据来自于b站up主忠厚老实的老王,视频;链接如下: 自动驾驶决策规划算法第二章第一节 决策规划仿真平台搭建_哔哩哔哩_bilibili 使用到的软件有matlab、prescan、carsim以及visual stadio。 我电脑上软件的版本是matlab2022a&am…...

RustGUI学习(iced/iced_aw)之扩展小部件(十八):如何使用badge部件来凸显UI元素?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第十八篇,主要讲述badge标记部件的使用,会结合实…...

触摸播放视频,并用iframe实现播放外站视频

效果&#xff1a; html: <div:style"{ height: homedivh }"class"rightOne_content_div_div"mouseenter"divSeenter(i)"mouseleave"divLeave(i)"click"ItemClick(i)"><!-- isUser是否是用户上传 --><divv-if…...

接口自动化-requests库

requests库是用来发送请求的库&#xff0c;本篇用来讲解requests库的基本使用。 1.安装requests库 pip install requests 2.requests库底层方法的调用逻辑 &#xff08;1&#xff09;get / post / put / delete 四种方法底层调用 request方法 注意&#xff1a;data和json都…...

队列的实现与OJ题目解析

"不是你变优秀了, 那个人就会喜欢你." 文章索引 前言1. 什么是队列2. 队列的实现3. OJ题目解析4. 总结 前言 感情可以培养是个伪命题. 如果有足够多的时间和爱, 就可以让另一个人爱上你的话, 那谁和谁都可以相爱了. 爱情之所以会让人死去活来, 是因为, 答案都写在了…...

中北大学软件学院javaweb实验三JSP+JDBC综合实训(一)__数据库记录的增加、查询

目录 1.实验名称2.实验目的3.实验内容4.实验原理或流程图5.实验过程或源代码&#xff08;一&#xff09;编程实现用户的登录与注册功能【步骤1】建立数据库db_news2024和用户表(笔者使用的数据库软件是navicat)【步骤2】实现用户注册登录功能(与上一实验报告不同的是&#xff0…...

高通QCS6490开发(一): 广翼智联FV01 AI板卡简介

《高通QCS6490开发》是一系列AIoT应用开发文章&#xff0c;我们将会在系列文章中陆续介绍基于QCS6490平台上的AIoT应用开发&#xff0c;在文章中&#xff0c;我们选择了广翼智联&#xff08;FAIOT&#xff09;公司的FV01产品作为开发板&#xff0c;介绍如何从底层的硬件板卡接线…...

【知识拓展】大白话说清楚:IP地址、子网掩码、网关、DNS等

前言 工作中常听别人说的本地网络是什么意思&#xff1f;同一网段又是什么意思&#xff1f;它俩有关系吗&#xff1f; 在工作中内经常会遇到相关的网络问题&#xff0c;涉及网络通信中一些常见的词汇&#xff0c;如IP地址、子网掩码、网关和DNS等。具体一点&#xff1a;经常会…...

Java 高级面试问题及答案2

Java 高级面试问题及答案 问题 1: 请解释 Java 中的多线程和并发的区别&#xff0c;并举例说明如何避免常见的并发问题。 答案&#xff1a; 多线程是指程序中有多个线程同时执行&#xff0c;而并发是指程序设计中允许多个操作看起来是同时执行的&#xff0c;即使它们可能不是…...

2024年网络安全威胁

随着2024年的到来&#xff0c;数字世界的版图正在以前所未有的速度扩张&#xff0c;引领我们进入一个技术革新的新时代。然而&#xff0c;这飞速的发展同时也催生了一系列错综复杂的网络安全挑战。在这个数字平台与我们生活日益紧密交织的时代&#xff0c;深入了解这些新兴的威…...

应用层之 HTTP 协议

HTTP 协议 HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议。所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些 其他的资源, 比如图片, 视频, 音频等二进制的数据。浏览器获取到网页&#…...

解决Word文档中页眉有部分有,有部分没有的问题

问题描述&#xff1a;一个Word文档中&#xff0c;在页眉上添加文档名称和页码&#xff0c;但是有的有&#xff0c;有的没有&#xff0c;选择“链接到前一节”也无法解决该问题。 原因分析&#xff1a;页眉页脚中&#xff0c;勾选了“首页不同”的选项&#xff0c;如下图&#…...

Python爬虫基础知识学习(以爬取某二手房数据、某博数据与某红薯(书)评论数据为例)

一、爬虫基础流程 爬虫的过程模块化&#xff0c;基本上可以归纳为以下几个步骤&#xff1a; 1、分析网页URL&#xff1a;打开你想要爬取数据的网站&#xff0c;然后寻找真实的页面数据URL地址&#xff1b; 2、请求网页数据&#xff1a;模拟请求网页数据&#xff0c;这里我们介…...

从Java到AI Agent:传统后端工程师的下一站,不是学AI,是成为系统工程师!

文章探讨了在AI技术发展的背景下&#xff0c;传统后端工程师的转型方向。作者认为&#xff0c;未来的竞争焦点不再是单纯的技术能力&#xff0c;而是如何将AI技术融入现有系统&#xff0c;构建自动化系统。文章提出了AI Agent工程师的概念&#xff0c;强调系统工程能力的重要性…...

Mermaid Live Editor:5分钟掌握专业图表制作的在线实时编辑器

Mermaid Live Editor&#xff1a;5分钟掌握专业图表制作的在线实时编辑器 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live…...

PDB文件管理实战:用符号服务器加速团队协作调试(含VS2022配置示例)

PDB文件管理实战&#xff1a;构建企业级符号服务器加速团队协作调试 当开发团队规模超过10人时&#xff0c;调试符号管理就会从技术问题升级为协作难题。想象这样的场景&#xff1a;周五下午5点&#xff0c;QA报告生产环境出现崩溃转储&#xff0c;开发团队需要立即分析。但当工…...

基于SpringBoot + Vue的养老院管理系统(角色:家属、护工、管理员)

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…...

ROS与Webots协同开发:舵轮底盘运动控制实战解析

1. 舵轮底盘的核心原理与结构设计 舵轮底盘作为全向移动机器人的核心部件&#xff0c;其独特之处在于每个轮子都具备独立转向和驱动的能力。这种设计使得机器人能够在平面内实现任意方向的平移和旋转&#xff0c;完全突破了传统差速底盘的运动限制。我曾在物流AGV项目中实测过&…...

基于python宠物医院药品管理系统的设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商功能模块设计技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块设计 药品信息管理模块 实现药品基础信息的…...

食品批发厂家口碑推荐榜

在食品批发行业&#xff0c;选择一家口碑良好的厂家至关重要。优质的食品批发厂家不仅能提供高品质的产品&#xff0c;还能保障稳定的供应和良好的售后服务。今天&#xff0c;我们就来为大家推荐一些口碑出众的食品批发厂家&#xff0c;其中惠州市佳德旺食品有限公司表现尤为突…...

MoveIt2新手必看:如何正确选择安装分支(main vs. tutorials)及使用vcs管理多仓库

MoveIt2分支选择与多仓库管理实战指南 当你在ROS2生态中开始使用MoveIt2时&#xff0c;第一个拦路虎往往不是算法理解或代码编写&#xff0c;而是如何正确搭建开发环境。MoveIt2作为由数十个独立Git仓库组成的复杂项目&#xff0c;其分支管理和版本协同问题困扰着许多中级开发者…...

Hunyuan-MT-7B实战教程:Pixel Language Portal与RAG架构结合提升专业翻译

Hunyuan-MT-7B实战教程&#xff1a;Pixel Language Portal与RAG架构结合提升专业翻译 1. 产品概览与核心价值 Pixel Language Portal&#xff08;像素语言跨维传送门&#xff09;是一款基于腾讯Hunyuan-MT-7B大模型构建的创新翻译工具。与传统翻译软件不同&#xff0c;它将语…...

Phi-3-mini-4k-instruct-gguf应用落地:律师助理合同风险点识别与提示生成

Phi-3-mini-4k-instruct-gguf应用落地&#xff1a;律师助理合同风险点识别与提示生成 1. 项目背景与价值 在法律服务领域&#xff0c;合同审查是律师日常工作中最耗时且重复性高的任务之一。传统人工审查方式存在效率低下、容易遗漏细节等问题。Phi-3-mini-4k-instruct-gguf作…...