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.sh
或nacos-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