https://seata.io/zh-cn/



seata使用Seata AT模式控制分布式事务的步骤:

1、每一个想控制分布式事务的服务对应的数据库都需要创建一个UNDO_LOG 表

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=1 DEFAULT CHARSET=utf8;

2、下载并安装事务协调器seata-server

https://github.com/seata/seata/releases

3、整合

(1)导入依赖注意只要在需要seata的服务中导入,因为如果在不需要seata的服务中导入,这个服务中又没有相应的seata配置,就会报错导致服务无法启动

       <!--引入管理分布式事务的seata-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>

springcloud版本是Greenwich.SR3,springboot版本是2.1.8.RELEASE引入的seata-all的版本是0.7.1

所以下载seata-server版本是0.7.1

(2)、安装seata-server0.7.1版本

首先修改seata-server中的配置,将他加入我们的nacos注册中心管理



(3)使用seata只需要使用注解@GlobalTransactional标在方法上



(4)所有想要使用分布式事务的微服务都要使用seata DataSourceProxy代理自己的数据源

package com.gulimall.order.config;

import com.zaxxer.hikari.HikariDataSource;
import io.seata.rm.datasource.DataSourceProxy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils; import javax.sql.DataSource; /**
* 使用seata DataSourceProxy代理自己的数据源
*/
@Configuration
public class MySeataConfig { @Autowired
DataSourceProperties dataSourceProperties; @Bean
public DataSource dataSource(DataSourceProperties dataSourceProperties) { HikariDataSource dataSource = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
if (StringUtils.hasText(dataSourceProperties.getName())) {
dataSource.setPoolName(dataSourceProperties.getName());
} return new DataSourceProxy(dataSource);
} }

(5)每个微服务都必须导入registry.conf、file.conf

这两个文件都在我们的下载的seata-server文件夹中。

同时修改file.conf中的下面位置

即修改成vgroup_mapping.项目名-fescar-service-group = "default"

(6)给分布式大事务的入口标注@GlobalTransactional

(7)给大事务中调用的远程方法上只需要标注@Transactional即可

4、进行测试,发现如果一个服务发生异常回滚,则它方法中调用的远程事务也会回滚

115、商城业务---分布式事务---使用Springboot提供的Seata解决分布式事务的更多相关文章

  1. springboot整合多数据源解决分布式事务

    一.前言        springboot整合多数据源解决分布式事务.             1.多数据源采用分包策略              2.全局分布式事务管理:jta-atomikos. ...

  2. 二、springboot项目使用seata实现分布式事务

    所有文章 https://www.cnblogs.com/lay2017/p/12078232.html 正文 在上一篇文章中,我们简单地了解了一下什么是seata.它是来自阿里巴巴的内部项目不断地发 ...

  3. Spring Cloud Alibaba 使用Seata解决分布式事务

    为什么会产生分布式事务? 随着业务的快速发展,网站系统往往由单体架构逐渐演变为分布式.微服务架构,而对于数据库则由单机数据库架构向分布式数据库架构转变.此时,我们会将一个大的应用系统拆分为多个可以独立 ...

  4. Spring Boot 集成 Seata 解决分布式事务问题

    seata 简介 Seata 是 阿里巴巴2019年开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务.在 Seata 开源之前,Seata 对应的内部版本在阿里内部一 ...

  5. 【分布式事务】spring cloud集成lcn解决分布式事务

    参考地址:https://blog.csdn.net/u010882691/article/details/82256587 参考地址:https://blog.csdn.net/oyh1203/ar ...

  6. 浅谈,seata在使用feign-url通过域名调用时分布式事务不生效的问题及解决

    浅谈,seata在使用feign-url通过域名调用时分布式事务不生效的问题及解决 ​ 在前几个月时,我们项目出现了分布式事务的问题,那么什么是分布式事务问题呢,简单的说,我们有俩服务A和B,它们对应 ...

  7. SpringBoot多数据源中的分布式事务

    虽然现在微服务越来越流行,我们的系统随之也拆分出来好多的模块功能.这样做的目的其实就是为了弥补单体架构中存在的不足.随着微服务的拆分,肯定设计到分库分表,但这之中肯定设计到分布式事务.最典型的例子就是 ...

  8. springboot学习笔记:10.springboot+atomikos+mysql+mybatis+druid+分布式事务

    前言 上一篇文章我们整合了springboot+druid+mybatis+mysql+多数据源: 本篇文章大家主要跟随你们涛兄在上一届基础上配置一下多数据源情况下的分布式事务: 首先,到底啥是分布式 ...

  9. 3分钟搞定SpringBoot+Mybatis+druid多数据源和分布式事务

    文章来自: https://blog.csdn.net/qq_29242877/article/details/79033287 在一些复杂的应用开发中,一个应用可能会涉及到连接多个数据源,所谓多数据 ...

  10. 微服务痛点-基于Dubbo + Seata的分布式事务(AT)模式

    前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案. ...

随机推荐

  1. 光纤加速卡第410篇:基于XCVU9P+ C6678的40G光纤的加速卡 光纤的加速卡 无线通信

    光纤加速卡第410篇:基于XCVU9P+ C6678的40G光纤的加速卡 光纤的加速卡 无线通信   基于XCVU9P+ C6678的40G光纤的加速卡 一.板卡概述 二.技术指标 •  板卡为自定义 ...

  2. visual studio 2015 IOS开发连接mac时提示错误couldn't connect to xxxx, please try again的一个方法

    本人使用虚拟机MAC.原本使用虚拟机中的VS2015连接正常没有问题. 但是当把MAC的虚拟机文件COPY到另一个机器上,提示"couldn't connect to xxxx,  plea ...

  3. laravel 导入导出(实际上还是php代码实现)

    1.导出 public function excel(){        $data=User::all();        $data=json_decode(json_encode($data), ...

  4. H5分享功能--带图标、说明

    代码实现 index.vue <template> <div id="app"> <SelfSharePage v-if="share_da ...

  5. 【SQL Server】存储过程带参数输出——output

    在SQL Server 中,如果要用一个存储过程返回字符串应该怎么做?用output参数. 错误方式 接下来,展示一下,常见的错误方法 CREATE PROCEDURE testString AS B ...

  6. MySQL8.0的下载、安装、配置

    转1: MySQL8.0的下载.安装.配置 MySQL8安装教程(下载.安装.连接.卸载) Navicat Premium 15激活(含注册机)

  7. 056_Connect or Sync to your Salesforce database by using an external database

    Integrate Salesforce with an External database: https://help.salesforce.com/articleView?id=000109985 ...

  8. Angular前端调用asp.net core web api后端,报跨域问题

    在 ASP.NET Core 中启用跨域请求 (CORS) https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnet ...

  9. linux下安装JDK 1.8 (Open JDK)

    CenterOS 7 阿里云,华为云都可以 检测是否已经安装过JDK yum list --installed|grep jdk 或者java  -version看下能不能执行. 如果已安装过但jdk ...

  10. git 产生冲突的处理方式

    理解你操作图形化的时候, git 在什么? 了解你在做的文件的git状态? 1. 添加文件 git add . -A git commit -m "your commit here" ...