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

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集群?

  1. 首先应用程序(客户端)中配置了事务分组(GlobalTransactionScanner 构造方法的txServiceGroup参数)。若应用程序是SpringBoot则通过seata.tx-service-group 配置
  2. 应用程序(客户端)会通过用户配置的配置中心去寻找service.vgroupMapping .[事务分组配置项],取得配置项的值就是TC集群的名称。若应用程序是SpringBoot则通过seata.service.vgroup-mapping.事务分组名=集群名称 配置
  3. 拿到集群名称程序通过一定的前后缀+集群名称去构造服务名,各配置中心的服务名实现不同(前提是Seata-Server已经完成服务注册,且Seata-Server向注册中心报告cluster名与应用程序(客户端)配置的集群名称一致)
  4. 拿到服务名去相应的注册中心去拉取相应服务名的服务列表,获得后端真实的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、前置安装与了解&#xff1a; 1、nacos的安装&#xff1a;docker安装nacos并挂载 2、seata的安装&#xff1a;docker安装seata并挂载&#xff0c;同时注册到nacos 3、spring-boot版本为2.6.12&#xff0c;spring-cloud-alibaba版本为2021.0.4.0&#xff0c;spring-cloud版本…...

Html5学习教程,从入门到精通,HTML5 简介语法知识点及案例代码(1)

HTML5 简介 HTML5 是最新的 HTML 标准&#xff0c;它引入了许多新特性&#xff0c;使网页开发更加强大和灵活。以下是一些关键的 HTML5 语法知识点&#xff1a; 1. 文档类型声明 (DOCTYPE) HTML5 的文档类型声明非常简单&#xff1a; <!DOCTYPE html>2. 字符编码 HT…...

Django加bootstrap实现上传文件含有进度条

1. 项目结构 myproject/ ├── myproject/ │ ├── settings.py │ ├── urls.py │ └── ... ├── myapp/ │ ├── templates/ │ │ └── upload.html │ ├── views.py │ ├── urls.py │ └── ... └── media/ # 手动创…...

八大排序算法(2)交换排序-冒泡排序 和 快速排序

快速排序&#xff08;Quick Sort&#xff09; 和 冒泡排序&#xff08;Bubble Sort&#xff09; 都是常见的交换排序算法&#xff0c;它们的核心思想都是通过交换元素来实现排序。但是&#xff0c;它们的工作原理和性能差异非常大。下面我们来详细对比这两种排序算法&#xff1…...

Python的那些事第二十三篇:Express(Node.js)与 Python:一场跨语言的浪漫邂逅

摘要 在当今的编程世界里,Node.js 和 Python 像是两个性格迥异的超级英雄,一个以速度和灵活性著称,另一个则以强大和优雅闻名。本文将探讨如何通过 Express 框架将 Node.js 和 Python 结合起来,打造出一个高效、有趣的 Web 应用。我们将通过一系列幽默风趣的实例和表格,展…...

STM32MP157A单片机移植Linux驱动

在stm32mp157a单片机移植Linux操作系统&#xff0c;并移植内核驱动&#xff0c;在应用程序中使用3个线程&#xff0c;分别实现控制单片机上3个led流水灯的功能、蜂鸣器控制的功能、风扇控制的功能。 需求整理&#xff1a; 1.驱动程序-->led1.c&#xff0c;led2.c&#xff…...

Qt程序退出相关资源释放问题

目录 问题背景&#xff1a; aboutToQuit 代码举例 closeEvent事件 代码举例 程序退出方式 quit() exit(int returnCode 0) close() 问题背景&#xff1a; 实际项目中程序退出前往往需要及进行一些资源释放、配置保存、线程中断等操作&#xff0c;避免资源浪费&#xff…...

【大学生职业规划大赛备赛PPT资料PDF | 免费共享】

自取链接&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/4fa45515325e &#x1f4e2; 同学&#xff0c;你是不是正在为职业规划大赛发愁&#xff1f; 想展示独特思路却不知如何下手&#xff1f; 想用专业模板却找不到资源&#xff1f; 别担心&#xff01;我整理了全网…...

win32汇编环境,对话框中使用菜单示例一

;运行效果 ;win32汇编环境,对话框中使用菜单示例一 ;最基本的应用&#xff0c;即添加菜单及点击后响应的操作方法 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>>>>>&g…...

AutoDock CrankPep or ADCP进行蛋白质多肽对接

需求描述 使用AutoDock CrankPep or ADCP进行蛋白质多肽对接 硬件及系统配置 自用电脑型号如下&#xff1a; 电脑&#xff1a;Precision Tower 7810 (Dell Inc.) CPU &#xff1a; Intel Xeon CPU E5-2686 v4 2.30GHz GPU&#xff1a; NVIDIA GeForce GTX 1070 Linux版本&a…...

高压直流熔断器研究

1.1 定义与作用 高压直流熔断器是一种用于直流电路的过电流保护装置&#xff0c;其主要作用是在电路中检测到过载电流或短路电流时&#xff0c;迅速切断电路&#xff0c;以防止电力设备受损或发生火灾等事故。根据 ISO-8820 和 QC/T420-2004 等标准的定义&#xff0c;熔断器是…...

微信小程序(uni)+蓝牙连接+Xprint打印机实现打印功能

1.蓝牙列表实现&#xff0c;蓝牙设备展示&#xff0c;蓝牙连接 <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&#xff1f;三、GraphQL的优势3.1 精确获取数据3.2 强类型系统3.3 单一端点3.4 实时数据 四、实际应用4.1 定义Schema4.2 实现解析器4.3 启动GraphQL服务器 五、结论 一、引言 在当今的 Web 开发中&#xff0c;API&#xff08;应用程序编程…...

深入理解Zookeeper:分布式系统的协调者

引言 在现代分布式系统中&#xff0c;协调和管理多个节点之间的状态和行为是一个复杂且关键的任务。Zookeeper作为一个分布式协调服务&#xff0c;为开发者提供了一种高效、可靠的方式来处理分布式系统中的一致性问题。本文将介绍Zookeeper的基本概念、使用场景以及如何通过示…...

python绘图之回归拟合图

回归拟合图在数据分析中具有重要作用&#xff0c;它不仅可以帮助我们理解变量之间的关系&#xff0c;还可以评估模型的拟合效果、进行预测和推断、发现异常值&#xff0c;以及用于模型比较和结果展示。 import pandas as pd import seaborn as sns import matplotlib.pyplot as…...

C语言学习笔记(第二部份)

说明&#xff1a;由于所有内容放在一个md文件中会非常卡顿&#xff0c;本文件将接续C.md文件的第二部分 结构体 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 结构体的成员可以是标量&#xff0c;数组&#xff0c;指针&#xff0c…...

jQuery UI CSS 框架 API

jQuery UI CSS 框架 API 概述 jQuery UI 是一个基于 jQuery 的用户界面和交互库,它提供了一套丰富的交互组件和视觉效果,旨在帮助开发者快速构建具有吸引力和互动性的网页应用。jQuery UI CSS 框架 API 是 jQuery UI 的一部分,它允许开发者通过简单的 CSS 类来控制 UI 组件…...

Redis7——基础篇(六)

前言&#xff1a;此篇文章系本人学习过程中记录下来的笔记&#xff0c;里面难免会有不少欠缺的地方&#xff0c;诚心期待大家多多给予指教。 基础篇&#xff1a; Redis&#xff08;一&#xff09;Redis&#xff08;二&#xff09;Redis&#xff08;三&#xff09;Redis&#x…...

Windows网络安全基础

随着互联网的发展和普及&#xff0c;Windows网络安全问题愈发严重。在本文中&#xff0c;我们将会介绍Windows网络安全的基本概念&#xff0c;包括网络攻击类型、网络安全威胁、网络安全防御措施等等&#xff0c;帮助初学者更好地了解Windows网络安全。 一、网络攻击类型 网络…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...