Spring Cloud Alibaba 整合Seata分布式事务

目录

  • 前言
  • 步骤
    • 引入相关maven依赖
    • 添加相关配置
      • Client端配置注册中心
      • Server端配置注册中心
      • Seata-Server相关配置
      • 启动seata-server
  • 使用方法
    • Seata AT 模式
      • 整体机制
    • 步骤
      • 初始化表结构
      • 标记注解@GlobalTransactional
  • 总结

前言

在数字化转型的浪潮下,企业业务系统的复杂度日益增长,微服务架构以其高度的模块化、可伸缩性和独立性,逐渐成为构建现代复杂应用的首选。然而,随着服务的拆分和细化,分布式事务问题也愈发凸显,成为制约微服务架构发展的一个重要瓶颈。
Seata(Simple Extensible Autonomous Transaction Architecture)是一个开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。Seata通过全局事务ID将多个分支事务进行关联,并使用TC(Transaction Coordinator)进行全局事务的控制和协调,确保在分布式环境下的数据一致性和完整性。
将Seata集成到微服务架构中,可以带来诸多优势。首先,它解决了微服务间的数据一致性问题,保证了在分布式环境下事务的原子性、一致性、隔离性和持久性。其次,Seata提供了灵活的事务模式,支持多种事务类型,如AT模式(基于补偿的分布式事务模式)、TCC模式(基于Try-Confirm-Cancel的分布式事务模式)和Saga模式(长事务模式),可以根据不同的业务场景选择合适的模式。此外,Seata还提供了友好的集成方式,可以轻松地与主流的微服务框架和数据库进行集成,降低了开发和维护的复杂度。
然而,微服务集成Seata也面临着一些挑战。首先,需要深入理解Seata的工作原理和事务模型,以便正确地使用它来解决分布式事务问题。其次,在集成过程中可能需要对现有的业务代码进行改造和适配,以符合Seata的要求。最后,还需要对Seata的性能和稳定性进行充分的测试和验证,以确保其在实际生产环境中的可靠性。

步骤

引入相关maven依赖

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

添加相关配置

Client端配置注册中心

seata:registry:type: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848group: "DEFAULT_GROUP"namespace: "dev"username: "nacos"password: "nacos"context-path: ""tx-service-group: default_tx_groupservice:vgroup-mapping:default_tx_group: default

Server端配置注册中心

seata:config:type: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848group: 'DEFAULT_GROUP'namespace: 'dev'username: 'nacos'password: 'nacos'

Seata-Server相关配置

#  Copyright 1999-2019 Seata.io Group.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.server:port: 17091spring:application:name: seata-serverlogging:config: classpath:logback-spring.xmlfile:path: ${user.home}/logs/seataextend:logstash-appender:destination: 127.0.0.1:4560kafka-appender:bootstrap-servers: 127.0.0.1:9092topic: logback_to_logstashconsole:user:username: seatapassword: seataseata:config:# support: nacos, consul, apollo, zk, etcd3type: nacosnacos:server-addr: 127.0.0.1:8848namespace: devgroup: DEFAULT_GROUPusername: nacospassword: nacoscontext-path:##if use MSE Nacos with auth, mutex with username/password attribute#access-key:#secret-key:data-id: seataServer.propertiesregistry:# support: nacos, eureka, redis, zk, consul, etcd3, sofatype: nacosnacos:application: seata-serverserver-addr: 10.0.8.10:8848group: DEFAULT_GROUPnamespace: devusername: nacospassword: nacoscluster: defaultcontext-path:##if use MSE Nacos with auth, mutex with username/password attribute#access-key:#secret-key:store:# support: file 、 db 、 redismode: file
#  server:
#    service-port: 8091 #If not configured, the default is '${server.port} + 1000'security:secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017tokenValidityInMilliseconds: 1800000ignore:urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

启动seata-server

docker run --name seata-server-demo -p 8091:8091 -p 7091:7091 -e SEATA_IP=127.0.0.1 -e SEATA_PORT=8091 -v /opt/project/seata-demo/config/resources:/seata-server/resources -v /opt/project/seata-demo/sessionStore:/seata-server/sessionStore -d seataio/seata-server:1.6.1

启动完成后Server端的服务出现在 Nacos 控制台中的注册中心列表中
image.png

使用方法

Seata AT 模式

AT 模式是 Seata 创新的一种非侵入式的分布式事务解决方案,Seata 在内部做了对数据库操作的代理层,我们使用 Seata AT 模式时,实际上用的是 Seata 自带的数据源代理 DataSourceProxy,Seata 在这层代理中加入了很多逻辑,比如插入回滚 undo_log 日志,检查全局锁等。

整体机制

两阶段提交协议的演变:

  • 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
  • 二阶段:
    • 提交异步化,非常快速地完成。
    • 回滚通过一阶段的回滚日志进行反向补偿。

步骤

初始化表结构

create table undo_log
(branch_id     bigint       not null comment 'branch transaction id',xid           varchar(128) not null comment 'global transaction id',context       varchar(128) not null comment 'undo_log context,such as serialization',rollback_info longblob     not null comment 'rollback info',log_status    int          not null comment '0:normal status,1:defense status',log_created   datetime(6)  not null comment 'create datetime',log_modified  datetime(6)  not null comment 'modify datetime',constraint ux_undo_logunique (xid, branch_id)
)comment 'AT transaction mode undo table' row_format = DYNAMIC;create index ix_log_createdon undo_log (log_created);

标记注解@GlobalTransactional

在需要事务的接口上标记seata提供的事务注解@GlobalTransactional,这样事务就生效了。

总结

完成上述步骤我们就完成了seata的集成。


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

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

相关文章

【spring】@Component注解学习

Component介绍 Component 是 Spring 框架中的一个注解&#xff0c;用于将一个类标记为 Spring 上下文中的一个组件。当一个类被标记为 Component 时&#xff0c;Spring 容器会在启动时自动扫描并实例化这个类&#xff0c;并将其注册到 Spring 上下文中。 Component 注解可以用…

集合深入------理解底层。

集合的使用 前提&#xff1a;栈、堆、二叉树、hashcode、toString()、quesalus()的知识深入和底层理解。 1、什么是集合 集合就是咋们所说的容器 ​ 前面我们学习过数组 数组也是容器 ​ 容器&#xff1a;装东西的 生活中有多少的容器呀? 水杯 教室 酒瓶 水库 只要是…

Mysql的存储引擎

目录 1.存储引擎概念 2.常用的存储引擎 2.1MyISAM 2.1.1MyISAM的特点 2.1.2MyISAM表支持3种不同的存储格式&#xff1a; 2.1.3MyISAM适用的生产场景举例 2.2InnoDB 2.2.1InnoDB特点介绍 2.2.2InnoDB适用生产场景分析 2.2.3InnoDB与MyISAM 区别 3.企业选择存储引擎依据…

C++ 扫描当前路径下文件并删除大文件

C 扫描当前路径下文件并删除大文件 C获取当前路径扫描文件路径下规定后缀名称的文件计算文件大小 1. 获取当前路径 使用<Windows.h>中的GetCurrentDirectory方法实现&#xff0c;单独编写验证程序如下&#xff1a; #include<iostream> #include<Windows.h&g…

Kotlin零基础入门到进阶实战

教程介绍 Kotlin现在是Google官方认定Android一级开发语言&#xff0c;与Java100%互通&#xff0c;并具备诸多Java尚不支持的新特性&#xff0c;每个Android程序员必备的Kotlin课程&#xff0c;每个Java程序员都需要了解的Kotlin&#xff0c;掌握kotlin可以开发Web前端、Web后…

pytorch中tensor类型转换的几个函数

目录 IntTensor转FloatTensor FloatTensor转IntTensor Tensor类型变为python的常规类型 IntTensor转FloatTensor .float函数&#xff1a; FloatTensor转IntTensor .int函数 Tensor类型变为python的常规类型 item函数

java项目将静态资源中的文件转为浏览器可访问的http地址

新增一个类叫啥无所谓&#xff0c;主要是实现 WebMvcConfigurer 加上注解 Configuration项目启动时加入bean中 只操作addResourceHandlers这一个方法 其他都没用 文章下方附带一个简易的上传图片代码 package cn.exam.config;import org.springframework.context.annotati…

STM32学习笔记(2)- 软件keil5安装和新建工程

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 软件安装…

​ 翻译 《The Old New Thing》

今天开始&#xff0c;为大家翻译微软优秀的技术专栏 The Old New Thing。 由微软高级工程师 Raymond Chen 撰写。该专栏起初是一个博客&#xff0c;后来也出版了同名书籍。专栏主要围绕 Windows 操作系统的开发和设计展开&#xff0c;涵盖了 Windows 平台的历史、技术细节、编程…

JMeter CSV 参数文件的使用方法

.在 JMeter 测试中&#xff0c;参数化是非常重要的&#xff0c;参数化允许我们模拟真实世界中的各种情况。本文我们将探讨如何在 JMeter 中使用 CSV 参数文件。 创建 CSV 文件 首先&#xff0c;我们需要创建一个逗号分隔的值&#xff08;CSV&#xff09;文件&#xff0c;其中…

http和socks5代理哪个好?

HTTP代理和SOCKS5代理各有其优缺点&#xff0c;但就隐蔽性而言&#xff0c;SOCKS5代理通常比HTTP代理更隐蔽。以下是它们的比较&#xff1a; HTTP代理&#xff1a; 透明性较高&#xff1a;HTTP代理在HTTP头中会透露原始客户端的IP地址&#xff0c;这使得它相对不太隐蔽。…

uni-app纵向步骤条

分享一下项目中自封装的步骤条&#xff0c;存个档~ 1. 话不多说&#xff0c;先看效果 2. 话还不多说&#xff0c;上代码 <template><!-- 获取一个数组&#xff0c;结构为[{nodeName:"流程发起"isAudit:falsetime:"2024-02-04 14:27:35"otherDat…

【Flink】Flink 处理函数之基本处理函数(一)

1. 处理函数介绍 流处理API&#xff0c;无论是基本的转换、聚合、还是复杂的窗口操作&#xff0c;都是基于DataStream进行转换的&#xff0c;所以统称为DataStreamAPI&#xff0c;这是Flink编程的核心。 但其实Flink为了更强大的表现力和易用性&#xff0c;Flink本身提供了多…

Qt程序可执行文件打包

目录 一、新建一个目录二、命令行2.1 添加临时变量2.2 打包命令 三、添加动态库四、普通 Qt 项目打包 Qml 项目打包 笔者写的python程序打包地址&#xff08;https://blog.csdn.net/qq_43700779/article/details/136994813&#xff09; 一、新建一个目录 新目录(例如test)用以…

Vue.js前端开发零基础教学(三)

目录 2.6 计算属性 2.7侦听器 2.8 样式绑定 2.8.1 绑定class属性 2.8.2 绑定style属性 2.9 阶段案例——学习计划表 2.6 计算属性 概念&#xff1a;Vue提供了计算属性来描述依赖响应式数据的复杂逻辑。 计算属性可以实时监听数据的变化&#xff0c;返回一个计算…

真假“长文本”,国产大模型混战

文&#xff5c;郝 鑫 Kimi有多火爆&#xff1f;凭一己之力搅乱A股和大模型圈。 Kimi概念股连日引爆资本市场&#xff0c;多个概念股随之涨停。在一片看好的态势中&#xff0c;谁都想来沾个边&#xff0c;据光锥智能不完全统计&#xff0c;目前&#xff0c;至少有包括读客…

【蓝桥杯知识点】浮点数二分(开n次方根再也不会超时啦!)

今天继续学习基础算法&#xff01;这篇文章介绍了二分的另一种应用——浮点数二分&#xff0c;可以用于开n次方根的计算&#xff0c;会使时间大大缩短&#xff01;我偷偷问过电脑编译器了&#xff0c;它说它喜欢优化过的算法哈哈哈哈~相信你也会喜欢的&#xff01; PS&#xff…

现代化应用部署工具-Docker

Docker 简介 什么是Docker Docker 是一个开源的应用容器引擎&#xff0c;可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上。 Docker部署的优势 通过使用Docker等容器技术&#xff0c;可以将应用程序及其依赖项…

构建品牌故事:Kompas.ai在叙事营销中的应用

引言 在数字化和全球化的浪潮中&#xff0c;品牌建设已经从单一的产品竞争演变为品牌故事的较量。叙事营销&#xff0c;作为一种通过讲述故事来传递品牌价值和理念的策略&#xff0c;已经成为连接品牌与消费者情感的桥梁。本文将深入探讨叙事营销的重要性&#xff0c;详细介绍K…

路由 (hash模式和history模式)

首先我们了解一下资源请求&#xff1a; 1.什么是资源 在浏览器需要某一个数据或文件进行解析或者浏览器在解析某个脚本的时候需要数据进行DOM渲染等工作&#xff0c;那么这个数据或文件就是浏览器的资源 2.资源怎么获取 浏览器的资源都必须通过资源请求的方式或从缓存中调出…