微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.5 实现AT 模式

news2024/11/27 10:30:37

微服务框架

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】

分布式事务

文章目录

      • 微服务框架
      • 分布式事务
      • 38 动手实践
        • 38.5 实现AT 模式
          • 38.5.1 实现 AT 模式

38 动手实践

38.5 实现AT 模式

38.5.1 实现 AT 模式

AT模式中的快照生成、回滚等动作都是由框架自动完成,没有任何代码侵入,因此实现非常简单。

  1. 导入课前资料提供的Sql文件:seata-at.sql,其中lock_table导入到TC服务关联的数据库,undo_log表导入到微服务关联的数据库:

在这里插入图片描述

将其导入数据库

现在在数据库中已经有了两个数据库, 一个seata、一个seata-demo

在这里插入图片描述

seata 是给TC 事务协调者用的,seata-demo 是给微服务用的

先在seata 中创建lock_table

DROP TABLE IF EXISTS `lock_table`;
CREATE TABLE `lock_table`  (
  `row_key` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `xid` varchar(96) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `transaction_id` bigint(20) NULL DEFAULT NULL,
  `branch_id` bigint(20) NOT NULL,
  `resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `table_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `pk` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `gmt_create` datetime NULL DEFAULT NULL,
  `gmt_modified` datetime NULL DEFAULT NULL,
  PRIMARY KEY (`row_key`) USING BTREE,
  INDEX `idx_branch_id`(`branch_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

在这里插入图片描述

OK,这就是全局锁 表

在微服务的seata-demo 数据库中导入数据快照 表 undo_log

在这里插入图片描述

OK【数据库准备工作就完成了】

  1. 修改application.yml文件,将事务模式修改为AT模式即可:

三个微服务都要改yml 配置文件

账户服务:

在这里插入图片描述

订单服务:

在这里插入图片描述

库存服务:

在这里插入图片描述

OK

  1. 重启服务并测试

三个微服务全部重启【因为笔者这里已经过了一天了】

启动Nacos 服务【单点模式】

在这里插入图片描述

访问Nacos 控制台

在这里插入图片描述

启动seata-server

在这里插入图片描述

OK,现在再来重启三个 微服务

在这里插入图片描述

OK,直接开始测试

现在先检查一下数据库中的数据

在这里插入图片描述

两条订单数据

在这里插入图片描述

账户当前余额 400

在这里插入图片描述

库存余额目前为 6

依然使用postman 进行测试

在这里插入图片描述

如果设定为 10,很明显就超过了 当前的库存量

直接send

在这里插入图片描述

OK, 可以看到500 了

检查数据库中的数据

在这里插入图片描述

没有创建 新的订单

在这里插入图片描述

账户余额也没有变

在这里插入图片描述

库存也没有减少

看看IDEA 的日志

在这里插入图片描述

OK

在这里插入图片描述

没毛病

现在看看快照表

在这里插入图片描述

OK,因为回滚之后,它会把数据都删掉,所以现在啥也看不到,也包括全局锁的信息,用完之后AT 模式都会进行删除

如果想看,可以通过打断点,让它回滚之后不进行删除操作

这样就是AT 模式的实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker部署mysql问题汇总

部署命令 注意conf文件在实际容器中的位置,有的版本是直接在/etc目录下,可以先创建一个容器进去看看 docker run --restartalways --privilegedtrue \ -v $PWD/mysql/data/:/var/lib/mysql \ -v $PWD/mysql/logs/:/var/log/mysql \ -v $PWD/mysql/con…

Shell脚本学习指南(七)——产生脚本

文章目录前言路径查找软件构建自动化前言 本篇,我们将进一步处理更复杂的工作。我们认为这里举出的例子都是一般用得到的工具,它们每一个都截然不同,且在大多数UNIX工具集里也没有。 在篇中的程序,包括命令行参数分析、在远程主…

电气数据|IEEE118(含风能太阳能)

1 概述 在本科或者研究生写论文时,经常需要用到很多数据,所以数据显得尤为重要。 下面这段文字,为了字数需要,所以可以忽略。 现代这种“探索、征服”的心态,从世界地图的演变可以看得一目了然。早在历史进到现代之前…

猿如意中的【PyCharm社区版】工具详情介绍

猿如意中的【PyCharm社区版】工具详情介绍,手把手教你使用猿如意下载、安装和配置【PyCharm社区版】,希望能帮助到有需要的童鞋。 文章目录前言一、猿如意介绍二、PyCharm社区版开发工具简介1.【PyCharm专业版】和【PyCharm社区版】的功能区别2.【PyChar…

新兴新能源设施[1]--盐穴压缩空气储能相关配套设施

新兴新能源设施[1]--盐穴压缩空气储能相关配套设施前言1. 什么是盐穴压缩空气储能?2. 盐穴储气的相关应用案例2.1 江苏常州应用案例2.2 衡阳压缩空气储能项目2.3 山东肥城10MW盐穴压缩空气储能系统3. 气-液、油-水界面信息探测和信息传输3.1 中子寿命测试油水界面&a…

一种近红外区荧光染料:ICG-Tetrazine,ICG-TZ,在影像医学,光热 等都会有一定的应用

凯新生物一种近红外区荧光染料,Cy系列(花菁类)染料(630-670 nm、650-700 nm),在影像医学,光热 等都会有一定的应用。和四嗪基团进行结合,进行相应的荧光标记。 【英文名称】 ICG-Te…

Linux 的常用命令

前言 本篇博客给大家介绍一些常见的 Linux 命令 目录操作 pwd 查看当前工作目录 clear 清除屏幕 cd ~ 当前用户目录 cd / 根目录 cd - 上一次访问的目录 cd .. 上一级目录 其中清除屏幕的快捷键是: ctrl l ls 语法: ls 选项 目录或文件 功能: 对于目录来说…

VS实现一个爬虫程序<c++>获取网页源代码

目的:写一个爬虫程序,可以进入http开头的网页,将网页的源代码显示出来. 结果展示: 思路: 1.解析网址 2.连接服务器->发请求 3.接收源代码并存储起来 函数: 1.解析网址函数: http://......./...... //....../之间的字符我们将其存储到urlAddr[]当中 /......之后的字符…

CentOS7安装Docker

1. 确定是CentOS8及其以上版本 $cat /etc/redhat-release 2. 卸载旧版本 $sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 3. yum安装gcc相关 $yum -y install g…

自动化部署npm安装sass是报错,往往是node版本太高导致的

本想尝试一下github的自动化部署,将一个vue项目部署到github pages上面,结果报错: 报错: npm ERR! code 1 50npm ERR! path /home/runner/work/CvReport/CvReport/node_modules/node-sass 51npm ERR! command failed 52npm ERR!…

感性认识:计算机基本工作原理

一. 计算机发展史概述 1946年2月14日,在美国宾夕法尼亚大学,众所周知的世界上第一台电子数字计算机ENIAC诞生。然而,英国在二战期间研制的电子计算机Colossus(巨人)却要比ENIAC早两年,多年来,英国人对自己研制首台电脑…

运筹说 第85期 | 只有初中学历的数学家

有学者形容华罗庚是在中国现代数学洪荒之地中抱定“战士死在沙场幸甚”的开拓者。这一句话足以肯定华罗庚教授在我国数学领域重要地位,下面我们就来一起领略伟人的风采。 (华罗庚,1910年11月12日-1985年6月12日) 华罗庚&#xff0…

预尝试4个小时入门Vue

目录 Vue简介 ​编辑 第一个vue程序 el挂载点 data数据对象 Vue指令 v-text和v-html v-on v-show v-if v-bind v-for v-model 记事本案例 axios网络请求库 1、安装 2、使用&#xff0c;作一个音乐播放器 均来自黑马教程。 Vue简介 第一个vue程序 <!DOCTYP…

用 Python 编写的 Python 解释器,你会吗?

计算机只能理解机器码。归根结底&#xff0c;编程语言只是一串文字&#xff0c;目的是为了让人类更容易编写他们想让计算机做的事情。真正的魔法是由编译器和解释器完成&#xff0c;它们弥合了两者之间的差距。解释器逐行读取代码并将其转换为机器码。 在本文中&#xff0c;我…

java计算机毕业设计基于安卓Android的儿童疫苗接种管理App

项目介绍 本文讲述了儿童疫苗管理App的设计与实现。结合电子管理系统的特点,分析了儿童疫苗管理App的现状,给出了儿童疫苗管理App实现的设计方案。 本论文主要完成不同用户的权限划分,不同用户具有不同权限的操作功能,在客户端,主要有管理员、医生和用户三个角色可以登录,用户…

【react】JSX基本语法

1、全称 JavaScript XML 2、定义 是react定义的一种类似于XML的JS扩展语法: JS XML本质是React.createElement(component, props, …children)方法的语法糖 3、作用: 用来简化创建虚拟DOM 4、标签名任意 HTML标签或其它标签 5、标签属性任意 HTML标签属性或其它 6、基本语法规…

Python 缩进语法的起源:上世纪 60-70 年代的大胆创意!

上个月&#xff0c;Python 之父 Guido van Rossum 在推特上转发了一篇文章《The Origins of Python》&#xff0c;引起了我的强烈兴趣。 众所周知&#xff0c;Guido 在 1989 年圣诞节期间开始创造 Python&#xff0c;当时他就职于荷兰数学和计算机科学研究学会&#xff08;简称…

SAP ABAP CDS view 里 INNER JOIN 和 Association 的区别

最近有朋友在我的知识星球里向我提问&#xff0c;SAP ABAP CDS view 的 INNER JOIN 和 Association 的功能可以理解为一样吗&#xff1f; (关于加入我的知识星球的方式&#xff0c;请移步本文文末) 本文就来聊一聊这个话题。既然 CDS view 里同时支持了 INNER JOIN 和 Assoc…

小伙伴因 unshift 插入数据被批,未曾想到找我诉苦竟梅开二度

背景 事情是这样的&#xff0c;今天小伙伴跟我诉苦&#xff0c;说写的代码被批了&#xff0c;原因是效率太低了&#xff0c;简单问了一下需求&#xff0c;就是将几千条数据倒序插入到数组中&#xff0c;他是通过循环搭配 unshift 实现的&#xff0c;听完我也批了他一顿。 小伙…

ImageNet

标题有点不太对是的 就能用了 这次是说 用有噪声的学生网络进行自我训练提高ImageNet分类 近年来&#xff0c;深度学习在图像识别方面取得了显著的成功。然而&#xff0c;最先进的视觉模型仍然是用监督学习来训练的&#xff0c;这就需要大量的标记图像才能很好地工作。 通过只…