Seata装置以及Spring boot集成

Seata应用docker装置的形式
官网文档: Seata部署指南

前提: Nacos装置胜利,具备docker环境

装置的三个角色(GitHub中的三个目录)

Github地址: seata/script at 1.4.0 · seata/seata (github.com)

  • client: 能够了解为集成Seata的Spring boot程序。在github中该目录中次要寄存undo_log.sql文件和我的项目的配置文件,其中undo_log.sql文件次要在业务数据库中执行寄存。
  • config-serverd: 这里能够了解为配置核心,也就时Nacos。在github中该目录次要寄存各种配置核心须要导入的配置,这里以Nacos为例子:config.txt时须要导入的配置,nacos-config.shnacos-config.py是能够将config.txt导入Nacos的脚本。
  • server: 这里了解为Seata Server 部署的环境。在github中该目录中保留的是须要执行的数据库文件。(留神,这些脚本与undo_log.sql不同,它们不放在业务数据库中)

Seata Server 部署

建设MySQL环境

在数据库中新建seata的数据库,并执行一下的SQL文件:

seata/mysql.sql at 1.4.0 · seata/seata (github.com)

编写配置文件

  • 获取配置文件

    在GitHub中下载Seat Server Release文件(这里下载仅仅是为了获取配置文件,对于部署将应用docker形式),而后解压文件:

    # 下载文件wget -c https://github.com/seata/seata/releases/download/v1.4.2/seata-server-1.4.2.zip# 解压文件unzipseata-server-1.4.2.zip
  • 将配置文件报错到本人定义的目录中

    # 新建目录mkdir /home/{user}/seata/config# 将配置文件放入到自定义目录中cp /home/{user}/seata/seata/seata-server-1.4.2/config/file.conf /home/{user}/seata/configcp /home/{user}/seata/seata/seata-server-1.4.2/config/registry.conf /home/{user}/seata/config
  • 批改配置文件file.conf

    # transaction log store, only used in seata-serverstore {  ## store mode: file、db、redis,   mode = "db" # 这里批改为db  ## rsa decryption public key  publicKey = ""  ......## database store property 在这里欠缺Seata将应用的数据库相干属性  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" # 示意应用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.1.1:3306/seata?rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=false"    user = "root"    password = "root"    minConn = 5    maxConn = 100    globalTable = "global_table"    branchTable = "branch_table"    lockTable = "lock_table"    queryLimit = 100    maxWait = 5000  }  ......}
  • 批改配置的registry.conf文件

    registry {  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa  type = "nacos" # 因为应用的配置核心是Nacos,所以这里抉择nacos  # 这里填写nacos的相干属性  nacos {    application = "seata-server"    serverAddr = "192.168.1.1:8848"    group = "SEATA_GROUP"    namespace = ""    cluster = "default"    username = "nacos"    password = "nacos"  }  ......}config {  # file、nacos 、apollo、zk、consul、etcd3  type = "file"  ......  file {      # 这里说名一下,因为应用docker部署的话没有命令间接配置file.conf      # 文件,因而间接在registry.conf里生命file.conf文件的地位      #(这里file.conf的地位是在docker容器内的地位,      # 在执行docker名令时会将理论的自定义配置文件目录与docker环境中的目录进行映射)    name = "file:/root/seata-config/file.conf"  }}

在Nacos中增加Seata相干配置

  • 批改config.txt文件

    transport.type=TCPtransport.server=NIOtransport.heartbeat=truetransport.enableClientBatchSendRequest=falsetransport.threadFactory.bossThreadPrefix=NettyBosstransport.threadFactory.workerThreadPrefix=NettyServerNIOWorkertransport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandlertransport.threadFactory.shareBossWorker=falsetransport.threadFactory.clientSelectorThreadPrefix=NettyClientSelectortransport.threadFactory.clientSelectorThreadSize=1transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThreadtransport.threadFactory.bossThreadSize=1transport.threadFactory.workerThreadSize=defaulttransport.shutdown.wait=3# 批改下一行,记住批改的东东,前面要用# service.vgroupMapping.my_test_tx_group=defaultservice.vgroupMapping.default_tx_group=default# 这里须要批改为 Seata的网络拜访地址# service.default.grouplist=127.0.0.1:8091service.default.grouplist=192.168.1.1:8091service.enableDegrade=falseservice.disableGlobalTransaction=falseclient.rm.asyncCommitBufferLimit=10000client.rm.lock.retryInterval=10client.rm.lock.retryTimes=30client.rm.lock.retryPolicyBranchRollbackOnConflict=trueclient.rm.reportRetryCount=5client.rm.tableMetaCheckEnable=falseclient.rm.sqlParserType=druidclient.rm.reportSuccessEnable=falseclient.rm.sagaBranchRegisterEnable=falseclient.tm.commitRetryCount=5client.tm.rollbackRetryCount=5client.tm.defaultGlobalTransactionTimeout=60000client.tm.degradeCheck=falseclient.tm.degradeCheckAllowTimes=10client.tm.degradeCheckPeriod=2000# 这里须要批改成db# store.mode=filestore.mode=dbstore.file.dir=file_store/datastore.file.maxBranchSessionSize=16384store.file.maxGlobalSessionSize=512store.file.fileWriteBufferCacheSize=16384store.file.flushDiskMode=asyncstore.file.sessionReloadReadSize=100# 接下来批改为本人数据库的信息store.db.datasource=druidstore.db.dbType=mysqlstore.db.driverClassName=com.mysql.cj.jdbc.Driverstore.db.url=jdbc:mysql://192.168.1.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=falsestore.db.user=rootstore.db.password=rootstore.db.minConn=5store.db.maxConn=30store.db.globalTable=global_tablestore.db.branchTable=branch_tablestore.db.queryLimit=100store.db.lockTable=lock_tablestore.db.maxWait=5000store.redis.host=127.0.0.1store.redis.port=6379store.redis.maxConn=10store.redis.minConn=1store.redis.database=0store.redis.password=nullstore.redis.queryLimit=100server.recovery.committingRetryPeriod=1000server.recovery.asynCommittingRetryPeriod=1000server.recovery.rollbackingRetryPeriod=1000server.recovery.timeoutRetryPeriod=1000server.maxCommitRetryTimeout=-1server.maxRollbackRetryTimeout=-1server.rollbackRetryTimeoutUnlockEnable=falseclient.undo.dataValidation=trueclient.undo.logSerialization=jacksonclient.undo.onlyCareUpdateColumns=trueserver.undo.logSaveDays=7server.undo.logDeletePeriod=86400000client.undo.logTable=undo_logclient.log.exceptionRate=100transport.serialization=seatatransport.compressor=nonemetrics.enabled=falsemetrics.registryType=compactmetrics.exporterList=prometheusmetrics.exporterPrometheusPort=9898
  • 将配置文件上传到Nacos配置核心中

    # 获取nacos-config.sh文件: https://github.com/seata/seata/blob/1.4.0/script/config-center/nacos/nacos-config.sh# 为文件授予执行权限sudo chmod +x nacos-config.sh# 执行下述命令, 其中-u后是nacos的用户名, -w是nacos的明码./nacos-config.sh -h 192.168.1.1 -p 8848 -g SEATA_GROUP -u nacos -w nacos

docker启动Seata Server环境

docker run --name seata-server -p 8091:8091 -e SEATA_IP=192.168.1.1 -e STORE_MODE=db -e SEATA_CONFIG_NAME=file:/root/seata-config/registry -v /home/{user}/seate/config:/root/seata-config -d seataio/seata-server:1.4.2

其中 SEATA_CONFIG_NAME获取的是docker容器中registry.conf配置文件的地位

-v /home/{user}/seate/config:/root/seata-config是将本地的/home/{user}/seate/config的目录挂载到/root/seata-config目录中。

Spring Boot集成Seata环境

前提: 数据库和Mybatis plus曾经集成上了,我的项目独自可能失常的运行。

业务数据库建表

-- for AT mode you must to init this sql for you business database. the seata server not need it.CREATE TABLE IF NOT EXISTS `undo_log`(    `branch_id`     BIGINT(20)   NOT NULL COMMENT 'branch transaction id',    `xid`           VARCHAR(100) 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(11)      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  AUTO_INCREMENT = 1  DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';

援用pom依赖

<dependency>    <groupId>io.seata</groupId>    <artifactId>seata-spring-boot-starter</artifactId>    <version>${seata-boot.version}</version></dependency><dependency>    <groupId>com.alibaba.cloud</groupId>    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>    <version>${seata-cloud.version}</version>    <exclusions>        <exclusion>            <groupId>io.seata</groupId>            <artifactId>seata-spring-boot-starter</artifactId>        </exclusion>    </exclusions></dependency>

yml配置文件

## seata配置seata:  enabled: true  application-id: ${spring.application.name}  # 上面这个须要跟刚刚config.txt上传到nacos配置核心的雷同  # config.txt中:service.vgroupMapping.default_tx_group=default(本人看,本人了解)  tx-service-group: default_tx_group   # 这里开启主动的数据源配置,否则后秒要本人手动配置  enable-auto-data-source-proxy: true  data-source-proxy-mode: AT  use-jdk-proxy: false  registry:    type: nacos    nacos:      application: seata-server      server-addr: 192.168.1.1:8848      group : "SEATA_GROUP"      namespace: ""      username: "nacos"      password: "nacos"  config:    type: nacos    nacos:      server-addr: 192.168.1.1:8848      namespace: ""      group: "SEATA_GROUP"      username: "nacos"      password: "nacos"  log:    exception-rate: 100  tcc-fence:    enable: true    config:      log-table-name: tcc_fence_log      clean-mode: hour      clean-period: 1