本文视频地址:https://www.bilibili.com/video/BV1U3411s7PK/

1 seata配置

关于下载启动,安装,建表等这块不在这里整理了。这里只描述下怎么导入配置:

https://github.com/seata/seata/tree/develop/script/config-center,官方的最新的配置文件在这个目录的config.txt。

ruoyi cloud 功能架构图 ruoyi-cloud_java

将config.txt拷贝到seata的conf目录下:

ruoyi cloud 功能架构图 ruoyi-cloud_spring_02

在这个目录下建一个nacos的文件夹,并将nacos-config.sh拷贝到这个文件夹,nacos-config.sh从哪里获取,到https://github.com/seata/seata/tree/develop/script/config-center/nacos这个目录下载:

ruoyi cloud 功能架构图 ruoyi-cloud_spring cloud_03

下载下来,路径的相对关系如下:

ruoyi cloud 功能架构图 ruoyi-cloud_spring cloud_04


在有git已经安装的前提下,执行nacos-config.sh,即可将配置导入到nacos。

其他的就是file.conf和registry.conf的配置了,就是seata本身作为一个微服务,它需要配置中心和注册中心,都配置nacos相关的即可。

ruoyi cloud 功能架构图 ruoyi-cloud_spring_05

2 配置改造

看下nacos上应用的配置:

# Tomcat
server:
  port: 9303

# Spring
spring:
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        loginUsername: admin
        loginPassword: 123456
    dynamic:
      druid:
        initial-size: 5
        min-idle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        filters: stat,slf4j
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      datasource:
        # 主库数据源
        master:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://rm-8vbqa4stsdfasdfaskso.mysql.zhangbei.rds.aliyuncs.com:3306/ry-qiniu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
          username: dongda
          password: 123
          # 从库数据源
          # slave:
          # username:
          # password:
          # url:
          # driver-class-name:
      seata: true    # 开启seata代理,开启后默认每个数据源都代理,如果某个不需要代理可单独关闭

  application:
    # 应用名称
    name: ruoyi-qiniu
  profiles:
    # 环境配置
    active: dev
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-dataids: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
    # seata 服务分组,要与服务端nacos-config.txt中service.vgroup_mapping的后缀对应
    alibaba:
      seata:
        tx-service-group: default_tx_group



# seata配置
seata:
  # 默认关闭,如需启用spring.datasource.dynami.seata需要同时开启
  enabled: true
  # Seata 应用编号,默认为 ${spring.application.name}
  application-id: seata-server
  # Seata 事务组编号,用于 TC 集群名
  tx-service-group: default_tx_group
  # 关闭自动代理
  enable-auto-data-source-proxy: false
  # 服务配置项
  service:
    # 虚拟组和分组的映射
    vgroup-mapping:
      default_tx_group: default
    grouplist:
      default: 127.0.0.1:8091
  config:
    type: nacos
    nacos:
#      serverAddr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace:
      server-addr: 127.0.0.1:8848
      username: nacos
      password: nacos
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      namespace:
      username: nacos
      password: nacos
      cluster: default

这一块就注意几点:

第一就是开启seata,也就是下面这段,否则数据库是不会被代理的:

ruoyi cloud 功能架构图 ruoyi-cloud_spring_06

ruoyi cloud 功能架构图 ruoyi-cloud_spring_07

第二是分组名称要对应,否则在实现事务的时候会报错:

ruoyi cloud 功能架构图 ruoyi-cloud_java_08

第三是调用接口时,接口如果有降级处理,事务也不会回滚。

第四是seata的分组配置

ruoyi cloud 功能架构图 ruoyi-cloud_ruoyi cloud 功能架构图_09

问题

seata在两阶段提交时候,因为第一阶段其实就已经完成提交了,如果这个时候,对数据做了修改,再回滚的时候,seata会一直报错。

其他

本篇文章依然是不完善的,见谅见谅。

x1 配置seata的dockerfile文件
x2 补充docker-compose.yml文件
version: "3.8"

services:

  ruoyi-seata:
    image: seataio/seata-server:latest
    hostname: seata-server
    ports:
      - 8091:8091
    environment:
      - SEATA_PORT=8091
    expose:
      - 8091
x3 deploy.sh中增加
docker-compose up -d ruoyi-seata

(由于其他项目赶进度原因,此处未完成,后续补充)

x4 配置

执行完,启动之后默认的注册中心和配置中心都是文件
registry.conf配置nacos的IP,账号和密码。

file.conf配置db

undo_log表

-- 注意此处0.3.0+ 增加唯一索引 ux_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;