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. sublime自动添加注释

    Step1: 需要使用组合键command+shift+p 搜索Install Package 后回车 确定 Step2: 经过上一步回车后到达第二步(可能需要等待一会儿),会出现搜索框,搜索DocB ...

  2. centos7 部署 DNS 主从

    centos7 部署 DNS 主从 环境 名称 ip地址 cpu 内存 yz-dns-master 10.148.100.81 4c 8G yz-dns-slave 10.148.100.82 4c ...

  3. ES6 - 参数默认值

    1.形参初始值, 具有默认值的参数,一般位置要靠后(潜规则) function add(a,b,c=10){ return a + b + c; } let resutl = add(1,2); // ...

  4. ConcurrentHashMap在Java8中的变化

    增加红黑树这个存储结构 在Java8中,为什么要增加红黑树这种数据结构来进行存储,而不是全部使用链表来进行存储呢? 1.因为攻击者可以构造大量具有相同hashCode的内容,使其全部放在同一个列表中, ...

  5. ESP8266-01S 烧录AT固件

    首先就是下载官网的下载软件和AT固件 这是下载好了的 然后就是硬件电路了 我是想把ESP8266用于Ardiuno板子的,然后网上有说买的USBTOTTL的3v3供电不够,所以我就用的Ardiuno板 ...

  6. Linux日常指令

    Linux: https://man.linuxde.net/     Linux命令大全  基础指令 终端输入: #shutdown -h now : 立即关机   #ls: 显示路径下所有的文件: ...

  7. iClock数据服务器默认账号密码

    网络空间资产搜索: shodan 搜索 默认密码 admin/a***n End!!!

  8. vue后台管理系统

    1. 项目概述: 根据不同的应用场景,电商系统一般都提供了 PC 端.移动 APP.移动 Web.微信小程序等多种终端访问方式. 2. 电商后台管理系统的功能 电商后台管理系统用于管理用户账号.商品分 ...

  9. 服务器性能测试工具ab

    ab指令 ab -n 1000 -c 20 http://127.0.0.1/

  10. std::ref

    The std::thread constructor copies the supplied values, without converting to the expected argument ...