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

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.lryc.cn/news/325151.html

相关文章:

  • unity 多屏幕操作
  • 4、Jenkins持续集成-用户权限和凭证管理
  • K8s-网络原理-中篇
  • vue基础——java程序员版(vue路由)
  • 【vue3学习之路(一)】
  • 基于Spring Boot网络相册设计与实现
  • 6 Spring-AOP
  • 这回轮到鸿蒙禁用安卓了!!!
  • Java问题详解
  • Go——指针和内存逃逸
  • PTA L2-032 彩虹瓶
  • Spring和Spring Boot之间的区别
  • 海外客户获取难?海外云手机助力电商引流!
  • 什么情况下 C++ 需要垃圾处理机制?
  • 流畅的 Python 第二版(GPT 重译)(七)
  • vue项目中使用vue-pdf或pdf.Js,实现在页面上预览pdf内容
  • 为什么静态成员函数不能是虚函数
  • python环境移植(本机windows到离线windows环境)
  • 蓝桥杯day9刷题日记
  • 阿里云数据库Cassandra的产品价格
  • 离散制造企业MES与流程企业MES的区别
  • 中国象棋C++
  • 记录一下目前为止的算法成长
  • AI大模型学习在数控系统工艺优化与智能制造中的应用
  • 安卓findViewById 的优化方案:ViewBinding与ButterKnife(一)
  • map和set(三)——红黑树
  • Day26 HashMap
  • 某蓝队面试经验
  • 【Linux】 centos7安装卸载SQL server(2017、2019)
  • 面试算法-110-课程表