springcloud整合seata

下载

seata下载地址
在这里插入图片描述
这两个都需要
太慢下不了的用下面的链接
链接:https://pan.baidu.com/s/1VH40aWWf8ejBolwTLLmh2w
提取码:dc8p

修改seata配置

在nacos里面配置命名空间,不指定会使用默认的
在这里插入图片描述

解压seata-server-1.4.2.zip 修改 seata-server-1.4.2\conf\下的 registry.conf文件,这里使用的是nacos作为配置文件,别的我都删了

registry {
  type = "nacos"

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP"
    namespace = "seata_namespace"
    cluster = "default"
    username = "nacos"
    password = "nacos"
  }
 
}

config {
  type = "nacos"

  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = "seata_namespace"
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
    dataId = "seataServer.properties"
  }
  
}

在这里插入图片描述
红框里面改为自己的配置

然后修改file.conf文件

## transaction log store, only used in seata-server
store {
  ## store mode: file、db、redis
  mode = "db"
  ## rsa decryption public key
  publicKey = ""


  ## database store property
  db {
    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
    datasource = "druid"
    ## mysql/oracle/postgresql/h2/oceanbase etc.
    dbType = "mysql"
    driverClassName = "com.mysql.cj.jdbc.Driver"
    ## if using mysql to store the data, recommend add rewriteBatchedStatements=true in jdbc connection param
    url = "jdbc:mysql://192.168.0.150:3307/seata?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true"
    user = "root"
    password = "root"
    minConn = 5
    maxConn = 100
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
    maxWait = 5000
  }

}

在这里插入图片描述
这里主要是配置数据库信息,注意我用的8.0的MySQL,5.+的包路径没有cj

解压seata源码,在seata-1.4.2\script\config-center\找到 config.txt文件
在这里插入图片描述
复制到seata根目录下
在这里插入图片描述
修改config.txt,主要的修改点
在这里插入图片描述

在下载的Seata源码的seata-1.4.2/script/config-center/nacos目录下找到nacos-config.sh文件
在这里插入图片描述
复制到seata根目录下
在这里插入图片描述
使用git命令执行脚本
在这里插入图片描述

sh nacos-config.sh -h 127.0.0.1 -p 8848 -g SEATA_GROUP -t seata_namespace -u nacos -w nacos

在这里插入图片描述

执行完成后nacos会生成配置文件
在这里插入图片描述

创建相关的库表

创建seata库,在库里创建seata需要的表
在这里插入图片描述

建表sql在 \seata-1.4.2\script\server\db
在这里插入图片描述

-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
    `xid`                       VARCHAR(128) NOT NULL,
    `transaction_id`            BIGINT,
    `status`                    TINYINT      NOT NULL,
    `application_id`            VARCHAR(32),
    `transaction_service_group` VARCHAR(32),
    `transaction_name`          VARCHAR(128),
    `timeout`                   INT,
    `begin_time`                BIGINT,
    `application_data`          VARCHAR(2000),
    `gmt_create`                DATETIME,
    `gmt_modified`              DATETIME,
    PRIMARY KEY (`xid`),
    KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
    KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
    `branch_id`         BIGINT       NOT NULL,
    `xid`               VARCHAR(128) NOT NULL,
    `transaction_id`    BIGINT,
    `resource_group_id` VARCHAR(32),
    `resource_id`       VARCHAR(256),
    `branch_type`       VARCHAR(8),
    `status`            TINYINT,
    `client_id`         VARCHAR(64),
    `application_data`  VARCHAR(2000),
    `gmt_create`        DATETIME(6),
    `gmt_modified`      DATETIME(6),
    PRIMARY KEY (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
    `row_key`        VARCHAR(128) NOT NULL,
    `xid`            VARCHAR(128),
    `transaction_id` BIGINT,
    `branch_id`      BIGINT       NOT NULL,
    `resource_id`    VARCHAR(256),
    `table_name`     VARCHAR(32),
    `pk`             VARCHAR(36),
    `gmt_create`     DATETIME,
    `gmt_modified`   DATETIME,
    PRIMARY KEY (`row_key`),
    KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

双击启动seata
在这里插入图片描述
启动后nacos里面会看到已经注册成功
在这里插入图片描述

在需要整合seata的项目使用的库里添加 undo_log 表
在这里插入图片描述

CREATE TABLE `undo_log` (
  `branch_id` bigint NOT NULL COMMENT 'branch transaction id',
  `xid` varchar(128) NOT NULL COMMENT 'global transaction id',
  `context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',
  `rollback_info` longblob NOT NULL COMMENT 'rollback info',
  `log_status` int NOT NULL COMMENT '0:normal status,1:defense status',
  `log_created` datetime(6) NOT NULL COMMENT 'create datetime',
  `log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='AT transaction mode undo table';

这个表会记录每一次操作的sql,后续如果需要回滚会根据这个表生成逆sql

整合到项目中

在每个服务里面添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>

修改 system的yml配置文件

spring:
  application:
    name: system
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_DISCOVERY_SERVER_ADDR:localhost:8848}
        ip: ${NACOS_DISCOVERY_IP:localhost}
        port: ${server.port}
    alibaba:
      seata:
        tx-service-group: server_system_tx_group
seata:
  application-id: system
  service:
    vgroup-mapping:
      server-product-tx_group: default


  registry:
    nacos:
      server-addr: 127.0.0.1:8848
      username: nacos
      password: nacos
      group: SEATA_GROUP
      namespace: seata_namespace
      application: seata-server

  config:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      username: nacos
      password: nacos
      group: SEATA_GROUP
      namespace: seata_namespace

在这里插入图片描述

在这里插入图片描述

这两快是后面添加上去的

修改 ops的yml配置文件

server:
  port: 8217
spring:
  application:
    name: ops
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_DISCOVERY_SERVER_ADDR:localhost:8848}
        ip: ${NACOS_DISCOVERY_IP:localhost}
        port: ${server.port}
    alibaba:
      seata:
        tx-service-group: server_ops_tx_group
        
seata:
  application-id: ops
  service:
    vgroup-mapping:
      server-order-tx_group: default

  registry:
    nacos:
      server-addr: 127.0.0.1:8848
      username: nacos
      password: nacos
      group: SEATA_GROUP
      namespace: seata_namespace
      application: seata-server

  config:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      username: nacos
      password: nacos
      group: SEATA_GROUP
      namespace: seata_namespace

在这里插入图片描述
两个配置只有这里有区别

测试
在方法入口处加上 @GlobalTransactional
在这里插入图片描述
被调用方
在这里插入图片描述

常见问题排查

1.项目无法注册到Seata,找不指定的group

can not get cluster name in registry config ‘service.vgroupMapping.xx‘, please make sure registry
在这里插入图片描述

查看配置文件config.txt

service.vgroupMapping.server_system_tx_group=default
service.vgroupMapping.server_ops_tx_group=default

在这里插入图片描述
和项目中填写的group是否一致
在这里插入图片描述
再看看nacos里面的配置
在这里插入图片描述
执行脚本时没有出错会在这里生成,如果nacos里面没有,检测修改配置文件后再使用git命令执行脚本

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值