SpringCloud Alibaba Seata处理分布式事务_学习笔记

分布式事务问题

问题:每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证.???
一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题.
Seata是一款开源的分布式事务解决方案,致力于在微服务框架下提供高性能和简单易用的分布式事务.
在这里插入图片描述
处理过程:
在这里插入图片描述

Seata的使用

简单的说,添加一个@GlobalTransactional注解即可

1.将下载好的Seata解压后,修改conf目录下的file.conf配置文件

主要修改:自定义事务组名称+事务日志存储模式为db+数据库连接信息
在这里插入图片描述
在这里插入图片描述

2.在mysql中建seata数据库,建表

执行conf下的sql文件

3.修改conf下的registry.conf配置文件

目的是:指明注册中心时nacos,以及修改nacos连接信息
在这里插入图片描述

4.启动nacos和Seata

5.准备:订单/库存/账户业务数据库

业务说明:当用户下单时,会在订单服务中创建一个订单,然后通过远程调用库存服务来扣减下单商品的库存,再通过远程调用账户开扣减用户账户里面的余额,最后在订单服务中修改订单状态为已完成.----该操作跨越三个数据库,有两次远程调用,很明显会有分布式事务问题.
下订单 —>扣库存---->减账户(余额)

①创建业务数据库

分别创建3个数据库

②在3个库中分别创建3张对应的业务 表

③按照上面的3个库分别创建对应的回滚日志

三个库下都需要建各自的回滚日志表
在seata/conf目录下有db_undo_log.sql文件,在每个库下分别执行一次;

6.准备订单/库存/账户业务微服务

业务需求:下订单>>减库存>>扣余额>>改(订单)状态

①新建订单Order-Module

1️⃣.在pom文件中添加依赖,由于seata需要与本地的seata版本一致,引入seata时它会自带一个版本,所以需要先踢掉,手动引入与本地版本一致的seata.

 
    <dependencies>
        <!--nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--seata-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>seata-all</artifactId>
                    <groupId>io.seata</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-all</artifactId>
            <version>0.9.0</version>
        </dependency>
        <!--feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--web-actuator-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--mysql-druid-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

以上是SpringCloud alibaba的依赖
2️⃣.application.yml

server:
  port: 2001
 
spring:
  application:
    name: seata-order-service
  cloud:
    alibaba:
      seata:
        #自定义事务组名称需要与seata-server中的对应
        tx-service-group: fsp_tx_group
    nacos:
      discovery:
        server-addr: localhost:8848
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/seata_order
    username: root
    password: 123456
 
feign:
  hystrix:
    enabled: false
 
logging:
  level:
    io:
      seata: info
 
mybatis:
  mapperLocations: classpath:mapper/*.xml

3️⃣.file.conf


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值