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

基于Seata的分布式事务方案

在Seata中,有4种分布式事务实现方案

XA、AT、TCC、Saga

其中XA利用了数据库的分布式事务特性,AT相当于框架去控制事务回滚。TCC手写三个方法,saga手写两个方法。

AT的性能和编写比较折中,是最常用的一种。TCC一些视频教程中介绍了单表单字段加中间表的方式存储过程数据,对于一次操作多个主子表数据的示例目前实现还是太繁琐了。

根据官方实例和相关视频简单写了下代码。

对于配置,能用默认的用默认,有示例配置的优先抄示例配置

1.加依赖

        <!-- 版本对应关系Alibaba 2021.0.5 对应 Seata 1.6.1https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E这里依赖不是 spring-cloud-alibaba-seata--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><version>2021.0.5.0</version></dependency>

这里alibaba版本是2021.0.5所以spring-cloud-starter-alibaba-seata也用这个版本,注意版本对应

2.写配置

seata:registry:type: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848group: SEATA_GROUPcluster: default#事务组tx-service-group:  default_tx_groupservice:#事务组和集群名称映射vgroup-mapping:default_tx_group: defaultdata-source-proxy-mode: AT

注意,这里需要先配置好nacos和seata服务端,seata服务端早期是json配置的,新版的是yaml配置

seata服务端配置application.yml

#  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: 7091spring:application:name: seata-serverlogging:config: classpath:logback-spring.xmlfile:path: ${log.home:${user.home}/logs/seata}extend:logstash-appender:destination: 127.0.0.1:4560kafka-appender:bootstrap-servers: 127.0.0.1:9092topic: logback_to_logstashconsole:user:username: seatapassword: seata
seata:config:# support: nacos, consul, apollo, zk, etcd3type: fileregistry:# support: nacos, eureka, redis, zk, consul, etcd3, sofatype: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848group: SEATA_GROUPnamespace:cluster: defaultusername:password:context-path: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,/**/*.jpeg,/**/*.ico,/api/v1/auth/login

3.写代码

将主调用的方法注解@Transactional改为@GlobalTransactional,其他微服务方法无需更改。

完整代码见顶部

http://www.lryc.cn/news/192570.html

相关文章:

  • 指令跳转:原来if...else就是goto
  • 【数据库系统概论】第四章数据库安全性
  • 如何正确的关闭Redis服务器
  • MySQL日志管理和权限管理(重点)
  • Maven 使用教程(二)
  • [Swift]同一个工程管理多个Target
  • DevExpress Reporting中文教程 - 如何在macOS等系统中生成导出报表文档
  • 1967作为子字符串出现在单词中的字符串数目
  • CocosCreator 面试题(二)JavaScript中的prototype的理解
  • python:从Excel或者CSV中读取因变量与多个自变量,用于训练机器学习回归模型,并输出预测结果
  • pycharm连接gitlab
  • 【C/C++数据结构 - 2】:稳定性与优化揭秘,揭开插入排序、希尔排序和快速排序的神秘面纱!
  • PCL点云处理之基于强度特征的SIFT关键点提取法 (二百一十五)
  • uniapp打包配置
  • 人大金仓分析型数据库最大量限制
  • centos 里面的service自启动app.jar,出现两个java进程,app是同一个端口
  • 【算法|双指针系列No.7】leetcodeLCR 007. 三数之和
  • ubuntu修改IP地址
  • java springboot 通过ConfigurationProperties给第三方bean注入属性
  • windows系统安装openssl并且转换证书格式
  • 【GO】基础速成
  • 五子棋(C语言实现)
  • thymeleaf,bootstrap-fileinput 多文件上传
  • 爬虫 | 基础模块了解
  • CSS复习笔记
  • 编译linux的设备树
  • ⛳ MyBatis 中 Mapper 接口工作原理实例解析
  • Android 音频可视化
  • 刷机与救砖避坑指南
  • 软件建模知识点