(Java企业 / 公司项目)分布式事务Seata详解(含Seata+Nacos组合使用)

一. Seata介绍

 Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前,其内部版本在阿里系内部一直扮演着应用架构层数据一致性的中间件角色,帮助经济体平稳的度过历年的双11,对上层业务进行了有力的技术支撑。经过多年沉淀与积累,其商业化产品先后在阿里云、金融云上售卖。2019.1 为了打造更加完善的技术生态和普惠技术成果,Seata 正式宣布对外开源,未来 Seata 将以社区共建的形式帮助用户快速落地分布式事务解决方案。

 官方网站: Seata

 找到对应的版本进行下载: 下载地址: Releases · apache/incubator-seata (github.com)

 或者博主提供的两个版本一个是最新版2.0.0 一个是现在使用的是1.6.1版本

【免费】 Seata是一款开源的分布式事务解决方案资源-CSDN文库

Seata术语

TC (Transaction Coordinator) - 事务协调者​

维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM (Transaction Manager) - 事务管理器​

定义全局事务的范围:开始全局事务、提交或回滚全局事务。

RM (Resource Manager) - 资源管理器​

管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

二. Seata分布式事务原理

官方文档就是最好的文档,多看官方的

 以下是Seata分布式事务四个模式的总结可以参考

  • AT模式,默认,简单,需要增加undo_log表,生成反向SQL,性能高,回滚后原来没数据的,现在还是没数据
  • TCC模式,try confirm/cancel,三个阶段的代码都得自己实现,Seata只负责调度对业务代码侵入性比较强,必要时可能还要修改数据库
  • SAGA模式,长事务解决方法,需要程序员自己编写两阶段的代码(AT模式不需要写)基于状态机来实现的需要一个JSON文件,可异步执行
  • XA模式,XA协议是由X/Open 组织提出的分布式事务处理规范基于数据库的XA协议来实现2PC又称为XA方案适用于强一致性的场景比如金融,银行等需要数据库本身支持XA协议可以跨数据库

Seata分布式事务体验

修改数据库字段,seata的AT模式会自动生成反向SQL,且没有反引号‘’,所以要求表里面不能有关键字,并且在模块中添加数据库表,我们使用的是AT模式

CREATE TABLE `undo_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,`ext` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

然后添加seata分布式组件依赖,查看maven是否添加进来了依赖client和server都是用的1.6.1

        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency>

接下来就是项目中的配置文件的配置,第一个可以使不做配置,这三个配置项都有默认值,默认客户端的tx-service-group=default_tx_group,最后一个是seata默认端口

 之后代码已修改就是增加或者换成@GlobalTransactional注解, 全局事务注解

下载安装seata之后不需要修改任何配置就可以直接启动

在配置文件配置的默认端口是8091 ,下面显示的是7091的原因 

 在我们的模块配置以上之后启动这个时候就会显示是否连接上了seata客户端,上面也有说明连接的数据库

 可以在代码中加入显示这个,发现全部都是一样的

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

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

相关文章

数字化转型与数据化思维

什么是数字化转型&#xff0c;什么是数据化思维&#xff0c;它们之间有什么关系&#xff1f; 数字化转型&#xff08;Digital Transformation&#xff09;是指企业或组织利用数字技术从根本上改变其业务活动、流程、文化和商业模式的过程&#xff0c;以适应不断变化的市场环境…

【Vue3/Vue2】判断设备是移动端还是pc端跳转不同路由router

Vue3代码 APP文件中写入js代码 1、首先&#xff0c;通过isMobile()函数判断用户的设备类型。该函数使用正则表达式匹配navigator.userAgent字符串&#xff0c;以确定用户是在移动设备上访问网页还是在桌面设备上访问网页 2、然后&#xff0c;在onMounted()钩子函数中&#…

http的tcp连接

http的tcp连接 三次握手 1、客户端第一次发起握手&#xff0c;请求建立tcp连接。 2、服务端接收到请求&#xff0c;知道客户端发送正常&#xff0c;为了让客户端知道服务端发送和接收信息正常&#xff0c;发起第二次握手&#xff0c;告诉客户端接收到了请求&#xff0c;并答…

vue3 - 自定义弹框组件

写了一个弹框组件 <template><transition name"modal-fade"><div v-if"showFlag" class"myModal"><div class"content"><div class"topBox"><div class"leftTitle"><spa…

线性代数——行列式按行(列)展开

目录 一、余子式&#xff1a;将行列式某元素所在行和列的元素全去掉 剩余部分所构成的行列式&#xff0c;称为该元素的余子式 二、代数余子式 三、行列式等于它的任一行&#xff08;列&#xff09;的各元素与对应代数余子式乘积之和 四、行列式某行元素&#xff08;列&…

单机物理机部署Datax

一、概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 源码地址&#xff1a;https://github.com/alibaba/DataX 为了解决异构数据…

什么是云服务器?云服务器的工作原理是介绍

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云百科aliyunbai…

Linux shell jq工具操作文档(jq --help使用示例)

文章目录 jq工具介绍jq --help解读英文中文 使用示例1. 使用最简单的过滤器。将输入复制到输出&#xff0c;不做任何修改&#xff08;除了格式化&#xff09;2. 使用 -c 选项进行紧凑输出而非美化输出3. 使用 -n 选项以 null 作为单一输入值&#xff08;用于创建新json&#xf…

STL——stack容器和queue容器详解

目录 &#x1f4a1;stack &#x1f4a1;基本概念 常用接口 &#x1f4a1;queue &#x1f4a1;基本概念 &#x1f4a1;常用接口 &#x1f4a1;stack &#x1f4a1;基本概念 栈&#xff08;stack&#xff09;&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端…

OpenGL 网格拾取坐标(Qt)

文章目录 一、简介二、代码实现三、实现效果参考资料一、简介 有时候我们希望通过鼠标来拾取某个网格中的坐标,这就涉及到一个很有趣的场景:光线投射,也就是求取一条射线与网格的交点,这里如果我们采用普通遍历网格中的每个面片的方式,当网格的面片数据量很大时计算效率就…

Oracle VARCHAR和VARCHAR2区别

在Oracle数据库中&#xff0c;VARCHAR和VARCHAR2是两种不同的数据类型&#xff0c;它们的区别如下&#xff1a; 1.存储空间 VARCHAR和VARCHAR2在存储空间上有所不同。在Oracle 7及以下版本中&#xff0c;VARCHAR类型的长度是固定的&#xff0c;如果存储的数据长度小于定义的长…

pyside6 捕捉主窗口关闭后,进行释放相关的资源

import sys from PySide6 import QtGui from PySide6.QtWidgets import QWidget,QApplication,QMessageBoxclass Message(QWidget):def __init__(self):# 如果希望窗口内嵌于其他部件&#xff0c;可添加parent参数super(Message, self).__init__()# 调用初始化方法self.initUI(…

学习方法论:PQ4R 提升理解力

Learning Methodology: PQ4R for Enhanced Comprehension 学习方法论&#xff1a;PQ4R 提升理解力 The PQ4R method, devised by Thomas and Robinson, is an effective learning strategy that promotes better understanding and retention of information. It consists of…

Python基本语法与变量的相关介绍

python基本语法与变量 python语句的缩进 Python代码块使用缩进对齐表示代码逻辑&#xff0c;Python每段代码块缩进的空白数量可以任意&#xff0c;但要确保同段代码块语句必须包含相同的缩进空白数量。建议在代码块的每个缩进层次使用单个制表符或两个空格或四个空格 , 切记不…

Redis分布式锁的Java实现之道

摘要&#xff1a; 在当今的微服务架构中&#xff0c;分布式锁是一个非常重要的概念。它允许我们在多个服务之间同步操作&#xff0c;确保数据的一致性和完整性。而Redis作为一种高性能的内存数据存储系统&#xff0c;常常被用来实现分布式锁。 一、分布式锁的基本概念 在分布…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置软件触发模式(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPISDK设置硬件触发模式&#xff08;C&#xff09; Baumer工业相机Baumer工业相机NEOAPISDK和软触发模式的技术背景Baumer工业相机通过NEOAPI SDK设置软件触发模式功能1.引用合适的类文件2.通过NEOAPI SDK实现软件触发采集图像的功能 Bau…

jQuery选择器(二) 过滤选择器及可见性过滤选择器的使用

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍在 jQuery中过滤选择器及可见性过滤选择器的使用以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任…

flutter使用get库管理路由,并设页面跳转动画和常见动画

get库还是非常强大的一个仓库&#xff0c;里面包含了非常常用的一些方法&#xff0c;比如路由管理&#xff0c;这是最常见和最常用的一个功能了&#xff0c;我们可以先配置一个路由对象&#xff0c;然后在里面配置路由列表&#xff0c;并且设置路由跳转方式。 第一种方式&…

教师资格证照片分辨率怎么调?教师资格证上传照片要求

最近教师资格证考试开始报名了&#xff0c;在报名之前需要准备好一些必备的材料&#xff0c;比如证件照片&#xff0c;报名考试平台一般都会对上传的证件照有具体的要求&#xff0c;比如考生本人近6个月以内的免冠正面证件照&#xff1b;照片格式及大小&#xff1a;JPG/JPEG格式…

Springboot读取配置文件

多种配置文件格式 springboot项目中不同配置文件的优先加载顺序 为&#xff1a;properties> yml >yaml>自定义核心类配置 自定义配置文件的加载 一般系统会加载默认的application.properties或者application.yml,但如果使用自定义配置文件&#xff0c;可使用下面方…