SpringCloud整合seata,XA、AT、TCC、SAGA模式

参考资料:

SpringCloud-Alibaba搭建

SpringCloud-nacos整合

Seata部署

参考demo(及学习资料)

seata官网

参考视频​​​​​c(AT模式的UNDO_LOG讲的可能有点问题,但是很通俗易懂)

 参考视频2(不太通俗易懂)

沽泡付费视频(就是对着官网念) 

上述三个视频的参考资料


准备环境:

        该教程默认已经有如下环境,如果没有可以参考上述教程:

  • 部署了Nacos
  • 部署了Seata
  • 搭建了SpringCloud 
  • 并且版本已经做到了统一(只要保证JVM里面使用的jar包版本和部署的版本一致即可
  • 同一系列版本见Wiki

 


模拟事件-搭建demo:

        因为seata是分布式事务,所以这个例子需要多个微服务,多个库进行联动

创建数据库

        首先创建两个数据库

CREATE DATABASE /*!32312 IF NOT EXISTS*/`seata_db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */;

USE `seata_db1`;

/*Table structure for table `money` */

DROP TABLE IF EXISTS `money`;

CREATE TABLE `money` (
  `id` varchar(32) NOT NULL COMMENT '主键',
  `user_name` varchar(32) DEFAULT NULL COMMENT '名字',
  `bank_money` double DEFAULT NULL COMMENT '银行余额',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*Data for the table `money` */

insert  into `money`(`id`,`user_name`,`bank_money`) values 
('084d862fa66c4c82886a4b0bb9214ab1','张三',100);

 

CREATE DATABASE /*!32312 IF NOT EXISTS*/`seata_db2` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */;

USE `seata_db2`;

/*Table structure for table `order_details` */

DROP TABLE IF EXISTS `order_details`;

CREATE TABLE `order_details` (
  `id` varchar(32) NOT NULL COMMENT '主键',
  `goods_name` varchar(32) DEFAULT NULL COMMENT '商品名',
  `count` int(11) DEFAULT NULL COMMENT '仓库余额',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*Data for the table `order_details` */

insert  into `order_details`(`id`,`goods_name`,`count`) values 
('7072809e86834335843bc918c33074ec','desk',50);

 

 创建示例微服务

         用搭建好的SpringClud框架,默认已经整合了nacos,并且已经部署好了seata

        关于微服务的创建,这里就不再赘述了,可以参考该文章

          参考上述文章,创建两个微服务   seata-demo1seata-demo2,然后进行相关依赖的导入

        这里是将所有的依赖加入到了公共服务里面,请根据个人情况使用,在common-service服务中的pom.xml文件,

Lombok依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>

 控制层依赖

        <!-- springboot starter web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

 mybatis-plus及数据库相关

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1.tmp</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--引入mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>

fegin组件

        <!--fegin组件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

 nacos相关(使用时默认的,如果nacos不是上述系列的则需要指定版本)

        <!--引入nacos client的依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--引入nacos config 依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

还有一些bootstrap.yml启动的辅助依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

最后添加的依赖如下:

然后将公共依赖引入创建的两个微服务,参考

        <dependency>
            <groupId>org.example</groupId>
            <artifactId>common-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

将相关配置交给nacos管理,可以参考文章,这里只是贴代码,不赘述

  • seata-demo1
bootstrap.yml
spring:
  profiles:
    include:
      uat

 bootstrap-uat.yml

spring:
  config:
    use-legacy-processing: true
  profiles.active: uat
  application:
    name: seata-demo1
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        group: DEFAULT_GROUP
        username: nacos
        password: nacos
        file-extension: yaml
        refresh-enabled: true

然后将相关配置放入到nacos中

server:
  port: 8081
spring:
    nacos:
        discovery:
            server-addr: localhost:8848
            username: nacos
            password: nacos
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/seata_db1?characterEncoding=UTF-8
        username: root
        password: 123888

  •  seata-demo2
bootstrap.yml
spring:
  profiles:
    include:
      uat

bootstrap-uat.yml

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PH = 7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值