分布式事务Seata-AT模式,在已有springcloud+eureka+feign+mybatis项目基础上如何整合Seata

本文详细介绍了如何在已有的SpringCloud+Eureka+Feign+Mybatis项目中整合分布式事务框架Seata的AT模式。涉及配置包括:Seata-server的file.conf和registry.conf,客户端的application.properties和registry.conf,添加POM依赖,数据源代理,创建数据库表,以及客户端使用和启动测试。通过这些步骤,实现了分布式事务的无缝接入。
摘要由CSDN通过智能技术生成

之前已经详细介绍过Seata的几种模式,今天用一个Demo来说明在现有springcloud+eureka+feign+mybatis项目基础上如何整合Seata,以官方demo为例
首先下载一下官方的Demo,地址:https://github.com/seata/seata-samples
然后下载Seata的server端,地址:https://github.com/seata/seata/releases

seata-samples项目下载好之后项目结构如下,然后我们要用的是springcloud-eureka-feign-mybatis-seata,demo里已经都加好了配置文件,我们逐步说一下都需要那些配置:
在这里插入图片描述
接下来是具体步骤:

1.修改seata-server的配置信息:

seata-server中,/conf目录下,有两个配置文件,需要结合自己的情况来修改:

1.1.file.conf

里面有事务组配置,锁配置,事务日志存储等相关配置信息,由于此demo使用db存储事务信息,我们这里要修改store中的配置:

transport {
   
  # tcp udt unix-domain-socket
  type = "TCP"
  #NIO NATIVE
  server = "NIO"
  #enable heartbeat
  heartbeat = true
  # the client batch send request enable
  enableClientBatchSendRequest = false
  #thread factory for netty
  threadFactory {
   
    bossThreadPrefix = "NettyBoss"
    workerThreadPrefix = "NettyServerNIOWorker"
    serverExecutorThreadPrefix = "NettyServerBizHandler"
    shareBossWorker = false
    clientSelectorThreadPrefix = "NettyClientSelector"
    clientSelectorThreadSize = 1
    clientWorkerThreadPrefix = "NettyClientWorkerThread"
    # netty boss thread size,will not be used for UDT
    bossThreadSize = 1
    #auto default pin or 8
    workerThreadSize = "default"
  }
  shutdown {
   
    # when destroy server, wait seconds
    wait = 3
  }
  serialization = "seata"
  compressor = "none"
}
# service configuration, only used in client side
service {
   
  #transaction service group mapping
  vgroupMapping.ydc_tx_group = "default" //注意,修改这里,ydc_tx_group 为自定义事务组名称,需保持server和client一致,否则报错
  #only support when registry.type=file, please don't set multiple addresses
  default.grouplist = "127.0.0.1:8091"
  #degrade, current not support
  enableDegrade = false
  #disable seata
  disableGlobalTransaction = false
}
#client transaction configuration, only used in client side
client {
   
  rm {
   
    asyncCommitBufferLimit = 10000
    lock {
   
      retryInterval = 10
      retryTimes = 30
      retryPolicyBranchRollbackOnConflict = true
    }
    reportRetryCount = 5
    tableMetaCheckEnable = false
    reportSuccessEnable = false
    sqlParserType = druid
  }
  tm {
   
    commitRetryCount = 5
    rollbackRetryCount = 5
  }
  undo {
   
    dataValidation = true
    logSerialization = "jackson"
    logTable = "undo_log"
  }
  log {
   
    exceptionRate = 100
  }
}
## transaction log store, only used in seata-server
store {
   
  ## store mode: file、db
  mode = "db"  //注意:修改这里,表明事务信息使用db存储

  ## file store property  // 当mode = "db"此部分配置不生效
  file {
   
    ## store location dir
    dir = "sessionStore"
    # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
    maxBranchSessionSize = 16384
    # globe session size , if exceeded throws exceptions
    maxGlobalSessionSize = 512
    # file buffer size , if exceeded allocate new buffer
    fileWriteBufferCacheSize = 16384
    # when recover batch read size
    sessionReloadReadSize = 100
    # async, sync
    flushDiskMode = async
  }

  ## database store property // 当mode = "db"事务日志会存储在这里配置的数据库里
  db {
   
    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp) etc.
    datasource = "dbcp"
    ## mysql/oracle/h2/oceanbase etc.
    dbType = "mysql"
    driverClassName = "com.mysql.jdbc.Driver"
    url = "jdbc:mysql://192.168.1.151:3306/seata" //注意,修改这里
    user = "test" //注意,修改这里
    password = "test" //注意,修改这里
    minConn = 1
    maxConn = 10
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
  }
}
## server configuration, only used in server side
server {
   
  recovery {
   
    #schedule committing retry period in milliseconds
    committingRetryPeriod = 1000
    #schedule asyn committing retry period in milliseconds
    asynCommittingRetryPeriod = 1000
    #schedule rollbacking retry period in milliseconds
    rollbackingRetryPeriod = 1000
    #schedule timeout retry period in milliseconds
    timeoutRetryPeriod = 1000
  }
  undo {
   
    logSaveDays = 7
    #schedule delete expired undo_log in milliseconds
    logDeletePeriod = 86400000
  }
  #unit ms,s,m,h,d represents milliseconds, seconds, minutes, hours
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值