springcloud整合seata
1、前置安装与了解:
1、nacos的安装:docker安装nacos并挂载
2、seata的安装:docker安装seata并挂载,同时注册到nacos
3、spring-boot版本为2.6.12,spring-cloud-alibaba版本为2021.0.4.0,spring-cloud版本为2021.0.4
1.1 事务分组如何找到后端Seata集群?
- 首先应用程序(客户端)中配置了事务分组(GlobalTransactionScanner 构造方法的txServiceGroup参数)。若应用程序是SpringBoot则通过seata.tx-service-group 配置
- 应用程序(客户端)会通过用户配置的配置中心去寻找service.vgroupMapping .[事务分组配置项],取得配置项的值就是TC集群的名称。若应用程序是SpringBoot则通过seata.service.vgroup-mapping.事务分组名=集群名称 配置
- 拿到集群名称程序通过一定的前后缀+集群名称去构造服务名,各配置中心的服务名实现不同(前提是Seata-Server已经完成服务注册,且Seata-Server向注册中心报告cluster名与应用程序(客户端)配置的集群名称一致)
- 拿到服务名去相应的注册中心去拉取相应服务名的服务列表,获得后端真实的TC服务列表(即Seata-Server集群节点列表)
2、在pom引入jar
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
3、在application.yml添加配置信息
注意:配置与默认一致的可以不要,我这里是为了记录特意写出来
seata:# 默认为true enabled: true# 开启数据源自动代理 默认为trueenable-auto-data-source-proxy: true# 事务模式 默认ATdata-source-proxy-mode: AT# 事务分组配置(在v1.5之后默认值为default_tx_group)tx-service-group: my_at_groupservice:# 指定事务分组至集群映射关系(右侧的集群名需要与Seata-server注册到Nacos的cluster保持一致)vgroup-mapping:my_at_group: defaultregistry:type: nacosnacos:server-addr: 192.168.56.10:8848application: seata-servergroup: DEFAULT_GROUPusername: nacospassword: nacos
- tx-service-group: 定义事务分组,可以自定义,多个微服务只有在同一个事务分组中,分布式事务才能生效,也就是多个微服务该参数要保持一致;
- servicevgroup-mapping: 定义该事务分组连接的seata服务端集群的名称,该名称需要和seata server 定义的集群名称保持一致;
4、项目使用
4.1 AT 模式使用:
seata 客户端的事务模式默认使用AT 模式;通过以下两个步骤配置就可使用:
- 在每个客户端数据库中增加undo_log 表,用于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=8 DEFAULT CHARSET=utf8;
- 在对应的业务实现中增加@GlobalTransactional 注解

4.2 XA 模式使用
mysql 开启XA协议:
# 查询是否开启XA协议
SHOW VARIABLES LIKE 'innodb_support_xa';
如果没有开通,则打开 MySQL 配置文件 my.cnf 或 my.ini。在文件中找到 [mysqld] 部分,并在该部分下添加以下行:
[mysqld]
innodb_support_xa = 1
保存配置文件并重启 MySQL 服务;
显示设置模式为XA 模式,代码层面无需变动;
在application.yml修改
seata:# 事务模式 默认ATdata-source-proxy-mode: XT
4.2 TCC模式使用
区别于在 AT 模式直接使用数据源代理来屏蔽分布式事务细节,业务方需要自行定义 TCC 资源的“准备”、“提交”和“回滚” 。比如在下方的例子中,
public interface TccActionOne {@TwoPhaseBusinessAction(name = "DubboTccActionOne", commitMethod = "commit", rollbackMethod = "rollback")public boolean prepare(BusinessActionContext actionContext, @BusinessActionContextParameter(paramName = "a") String a);public boolean commit(BusinessActionContext actionContext);public boolean rollback(BusinessActionContext actionContext);
}
Seata 会把一个 TCC 接口当成一个 Resource,也叫 TCC Resource。在业务接口中核心的注解是 @TwoPhaseBusinessAction,表示当前方法使用 TCC 模式管理事务提交,并标明了 Try,Confirm,Cancel 三个阶段。name属性,给当前事务注册了一个全局唯一的的 TCC bean name。同时 TCC 模式的三个执行阶段分别是:
- Try 阶段,预定操作资源(Prepare) 这一阶段所以执行的方法便是被 @TwoPhaseBusinessAction 所修饰的方法。如示例代码中的 prepare 方法。
- Confirm 阶段,执行主要业务逻辑(Commit) 这一阶段使用 commitMethod 属性所指向的方法,来执行Confirm 的工作。
- Cancel 阶段,事务回滚(Rollback) 这一阶段使用 rollbackMethod 属性所指向的方法,来执行 Cancel 的工作。
其次,可以在 TCC 模式下使用 BusinessActionContext 在事务上下文中传递查询参数。如下属性:
- xid 全局事务id
- branchId 分支事务id
- actionName 分支资源id,(resource id)
- actionContext 业务传递的参数,可以通过 @BusinessActionContextParameter 来标注需要传递的参数。
在定义好 TCC 接口之后,我们可以像 AT 模式一样,通过 @GlobalTransactional 开启一个分布式事务。
@GlobalTransactional
public String doTransactionCommit(){tccActionOne.prepare(null,"one");tccActionTwo.prepare(null,"two");
}
注意,如果 TCC 参与者是本地 bean(非远程RPC服务),本地 TCC bean 还需要在接口定义中添加 @LocalTCC 注解,比如,
@LocalTCC
public interface TccActionTwo {@TwoPhaseBusinessAction(name = "TccActionTwo", commitMethod = "commit", rollbackMethod = "rollback")public boolean prepare(BusinessActionContext actionContext, @BusinessActionContextParameter(paramName = "a") String a);public boolean commit(BusinessActionContext actionContext);public boolean rollback(BusinessActionContext actionContext);
}
相关文章:
springcloud整合seata
1、前置安装与了解: 1、nacos的安装:docker安装nacos并挂载 2、seata的安装:docker安装seata并挂载,同时注册到nacos 3、spring-boot版本为2.6.12,spring-cloud-alibaba版本为2021.0.4.0,spring-cloud版本…...
Html5学习教程,从入门到精通,HTML5 简介语法知识点及案例代码(1)
HTML5 简介 HTML5 是最新的 HTML 标准,它引入了许多新特性,使网页开发更加强大和灵活。以下是一些关键的 HTML5 语法知识点: 1. 文档类型声明 (DOCTYPE) HTML5 的文档类型声明非常简单: <!DOCTYPE html>2. 字符编码 HT…...
Django加bootstrap实现上传文件含有进度条
1. 项目结构 myproject/ ├── myproject/ │ ├── settings.py │ ├── urls.py │ └── ... ├── myapp/ │ ├── templates/ │ │ └── upload.html │ ├── views.py │ ├── urls.py │ └── ... └── media/ # 手动创…...
八大排序算法(2)交换排序-冒泡排序 和 快速排序
快速排序(Quick Sort) 和 冒泡排序(Bubble Sort) 都是常见的交换排序算法,它们的核心思想都是通过交换元素来实现排序。但是,它们的工作原理和性能差异非常大。下面我们来详细对比这两种排序算法࿱…...
Python的那些事第二十三篇:Express(Node.js)与 Python:一场跨语言的浪漫邂逅
摘要 在当今的编程世界里,Node.js 和 Python 像是两个性格迥异的超级英雄,一个以速度和灵活性著称,另一个则以强大和优雅闻名。本文将探讨如何通过 Express 框架将 Node.js 和 Python 结合起来,打造出一个高效、有趣的 Web 应用。我们将通过一系列幽默风趣的实例和表格,展…...
STM32MP157A单片机移植Linux驱动
在stm32mp157a单片机移植Linux操作系统,并移植内核驱动,在应用程序中使用3个线程,分别实现控制单片机上3个led流水灯的功能、蜂鸣器控制的功能、风扇控制的功能。 需求整理: 1.驱动程序-->led1.c,led2.cÿ…...
Qt程序退出相关资源释放问题
目录 问题背景: aboutToQuit 代码举例 closeEvent事件 代码举例 程序退出方式 quit() exit(int returnCode 0) close() 问题背景: 实际项目中程序退出前往往需要及进行一些资源释放、配置保存、线程中断等操作,避免资源浪费ÿ…...
【大学生职业规划大赛备赛PPT资料PDF | 免费共享】
自取链接: 链接:https://pan.quark.cn/s/4fa45515325e 📢 同学,你是不是正在为职业规划大赛发愁? 想展示独特思路却不知如何下手? 想用专业模板却找不到资源? 别担心!我整理了全网…...
win32汇编环境,对话框中使用菜单示例一
;运行效果 ;win32汇编环境,对话框中使用菜单示例一 ;最基本的应用,即添加菜单及点击后响应的操作方法 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>>>>>&g…...
AutoDock CrankPep or ADCP进行蛋白质多肽对接
需求描述 使用AutoDock CrankPep or ADCP进行蛋白质多肽对接 硬件及系统配置 自用电脑型号如下: 电脑:Precision Tower 7810 (Dell Inc.) CPU : Intel Xeon CPU E5-2686 v4 2.30GHz GPU: NVIDIA GeForce GTX 1070 Linux版本&a…...
高压直流熔断器研究
1.1 定义与作用 高压直流熔断器是一种用于直流电路的过电流保护装置,其主要作用是在电路中检测到过载电流或短路电流时,迅速切断电路,以防止电力设备受损或发生火灾等事故。根据 ISO-8820 和 QC/T420-2004 等标准的定义,熔断器是…...
微信小程序(uni)+蓝牙连接+Xprint打印机实现打印功能
1.蓝牙列表实现,蓝牙设备展示,蓝牙连接 <template><view class"container"><view class"container_top"><view class"l">设备名称</view><view class"r">{{state.phoneNam…...
使用 Docker 部署 Flask 应用
使用 Docker 部署 Flask 应用 一、引言 在现代软件开发中,应用的部署和环境管理是至关重要的环节。传统的部署方式常常会遇到 “在我机器上能运行,在你机器上不行” 的问题,而 Docker 的出现很好地解决了这个痛点。Docker 是一个用于开发、部署和运行应用程序的开放平台,…...
深入浅出GraphQL:现代API设计的未来
文章目录 一、引言二、什么是GraphQL?三、GraphQL的优势3.1 精确获取数据3.2 强类型系统3.3 单一端点3.4 实时数据 四、实际应用4.1 定义Schema4.2 实现解析器4.3 启动GraphQL服务器 五、结论 一、引言 在当今的 Web 开发中,API(应用程序编程…...
深入理解Zookeeper:分布式系统的协调者
引言 在现代分布式系统中,协调和管理多个节点之间的状态和行为是一个复杂且关键的任务。Zookeeper作为一个分布式协调服务,为开发者提供了一种高效、可靠的方式来处理分布式系统中的一致性问题。本文将介绍Zookeeper的基本概念、使用场景以及如何通过示…...
python绘图之回归拟合图
回归拟合图在数据分析中具有重要作用,它不仅可以帮助我们理解变量之间的关系,还可以评估模型的拟合效果、进行预测和推断、发现异常值,以及用于模型比较和结果展示。 import pandas as pd import seaborn as sns import matplotlib.pyplot as…...
C语言学习笔记(第二部份)
说明:由于所有内容放在一个md文件中会非常卡顿,本文件将接续C.md文件的第二部分 结构体 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 结构体的成员可以是标量,数组,指针,…...
jQuery UI CSS 框架 API
jQuery UI CSS 框架 API 概述 jQuery UI 是一个基于 jQuery 的用户界面和交互库,它提供了一套丰富的交互组件和视觉效果,旨在帮助开发者快速构建具有吸引力和互动性的网页应用。jQuery UI CSS 框架 API 是 jQuery UI 的一部分,它允许开发者通过简单的 CSS 类来控制 UI 组件…...
Redis7——基础篇(六)
前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一)Redis(二)Redis(三)Redis&#x…...
Windows网络安全基础
随着互联网的发展和普及,Windows网络安全问题愈发严重。在本文中,我们将会介绍Windows网络安全的基本概念,包括网络攻击类型、网络安全威胁、网络安全防御措施等等,帮助初学者更好地了解Windows网络安全。 一、网络攻击类型 网络…...
区块链DeFi实战
区块链DeFi实战:探索去中心化金融新机遇 近年来,区块链技术的快速发展催生了去中心化金融(DeFi)的崛起。DeFi通过智能合约和去中心化协议重构传统金融体系,为用户提供无需中介的借贷、交易和理财服务。本文将深入探讨…...
如何快速配置Android Studio中文插件:新手友好完整指南
如何快速配置Android Studio中文插件:新手友好完整指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 你是否在使用A…...
当AI拥有记忆和反思:拆解斯坦福小镇里Agent的‘大脑’是如何工作的
当AI拥有记忆和反思:拆解斯坦福小镇里Agent的‘大脑’是如何工作的 想象一下,一个虚拟小镇里的居民能记住昨天在咖啡馆的对话,会因冰箱空了而决定去超市,甚至能反思自己与邻居的关系——这不是科幻电影,而是斯坦福大学…...
终极指南:如何在电脑上流畅控制安卓手机的完整教程
终极指南:如何在电脑上流畅控制安卓手机的完整教程 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy …...
构建企业级AI驱动测试自动化平台的完整架构实战
构建企业级AI驱动测试自动化平台的完整架构实战 【免费下载链接】testsigma Testsigma is an agentic test automation platform powered by AI-coworkers that work alongside QA teams to simplify testing, accelerate releases and improve quality across web, mobile, de…...
STM32串口发送HAL_BUSY错误频发?深入HAL_UART_Transmit_IT状态机与避坑全解析
STM32串口发送HAL_BUSY错误频发?深入HAL_UART_Transmit_IT状态机与避坑全解析 在嵌入式开发中,STM32的HAL库为开发者提供了便捷的硬件抽象层接口,其中串口通信是最常用的外设之一。然而,许多开发者在实际项目中使用HAL_UART_Trans…...
机器学习中的解析解与数值解:理解算法选择本质
1. 机器学习中的解析解与数值解:为什么没有标准答案?作为一名从业多年的机器学习工程师,我经常被问到这样的问题:"我的数据应该用什么算法?"、"模型参数该怎么调?"。每当这时ÿ…...
如何用Ryujinx在电脑上畅玩Switch游戏:从零开始的终极指南
如何用Ryujinx在电脑上畅玩Switch游戏:从零开始的终极指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上体验《塞尔达传说:旷野之息》或《超级马里…...
终极神界原罪2模组管理指南:如何快速解决模组冲突问题
终极神界原罪2模组管理指南:如何快速解决模组冲突问题 【免费下载链接】DivinityModManager A mod manager for Divinity: Original Sin - Definitive Edition. 项目地址: https://gitcode.com/gh_mirrors/di/DivinityModManager Divinity Mod Manager是一款…...
3步搞定Windows风扇智能控制:Fan Control完全配置指南
3步搞定Windows风扇智能控制:Fan Control完全配置指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa…...
