赞
踩
本地锁:本地数据库在提交事务之前需要获取到本地锁和全局锁才能够提交
全局锁:在进行分布式事务时,全局事务的提交需要获取到全局锁,然后在各个本地数据库在通过获取各自数据库的本地锁实现事务提交
AT模式分为两个阶段
维护全局和分支事务的状态,驱动全局事务提交或回滚。
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
本次使用的Seata版本选用1.5.1,在该版本中没有了相应的数据库执行文件、file.conf、registry.conf等文件
其他版本下载地址,进入之后选择相应的版本然后点击Downloads即可,会跳转到对应的下载界面,看看是需要下载zip版本还是tar版本
修改confi目录下的application.yaml文件,其余配置按照原先的配置即可,需要修改的地方主要是seata处
server: port: 7091 spring: application: name: seata-server logging: config: classpath:logback-spring.xml file: path: ${ user.home}/logs/seata extend: logstash-appender: destination: 127.0.0.1:4560 kafka-appender: bootstrap-servers: 127.0.0.1:9092 topic: logback_to_logstash console: user: username: seata password: seata seata: config: type: nacos #使用nacos作为配置中心 nacos: server-addr: 192.168.72.130:8848 #启动可能会出现Client not connected,current status:STARTING,那就将地址换成http://192.168.72.130:8848 namespace: public #命名空间配置 group: DEFAULT_GROUP #分组信息配置 username: nacos #如果开启了nacos的验证功能则需要配置 password: nacos data-id: seataServer.properties #nacos中的配置文件名称 registry: type: nacos #使用nacos作为注册中心 nacos: application: seata-server server-addr: 192.168.72.130:8848 #出现Client not connected,current status:STARTING就配上http group: DEFAULT_GROUP namespace: public cluster: seatatest #此处注意,这的值要和nacos中的配置文件service.vgroupMapping.my_test_tx_group的值一样 username: nacos password: nacos ##if use MSE Nacos with auth, mutex with username/password attribute #access-key: "" #secret-key: "" security: secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017 tokenValidityInMilliseconds: 1800000 ignore: urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
上一步中将nacos作为了配置中心和注册中心,所以nacos中肯定会有相应的配置文件,参照application.yml配置文件中的相关信息可以知道需要在public命名空间中的默认分组新建一个名为seataServer.proterties配置文件,将下列配置写其中,这也是Seata自带的,不过高级的版本中没有了,这里是从官网拷贝过来的。该文件主要就是配置数据库连接信息,在配置数据库连接时需要注意的是根据MySQL的版本不同,连接驱动也不一样,MySQL8以下的使用store.db.driverClassName=com.mysql.jdbc.Driver,mysql8则使用store.db.driverClassName=com.mysql.cj.jdbc.Driver
#此处需要注意,这里的配置需要在nacos中新建一个配置文件,就叫service.vgroupMapping.my_test_tx_group文件里面值就是seatatest和前面的配置registry.nacos.cluster的值是一样的 service.vgroupMapping.my_test_tx_group=seatatest #这里的地址需要配置成seata所在服务器的地址 service.default.grouplist=127.0.0.1:8091 service.enableDegrade=false service.disableGlobalTransaction=false #此处对于数据存储使用的是数据库存储所以需要配置数据库的连接信息 store.mode=db store.db.datasource=druid store.db.dbType=mysql #数据库驱动如果是mysql8使用这个,否则使用com.mysql.jdbc.Driver store.db.driverClassName=com.mysql.cj.jdbc.Driver store.db.url=jdbc:mysql://192.168.72.130:3306/seata?useUnicode=true&rewriteBatchedStatements=true store.db.user=root store.db.password=root store.db.minConn=5 store.db.maxConn=30 #此处有四张表的配置,所以需要在数据库中执行对应的SQL创建表 store.db.globalTable=global_table store.db.branchTable=branch_table store.db.distributedLockTable=distributed_lock store.db.queryLimit=100 store.db.lockTable=lock_table store.db.maxWait=5000 #Transaction rule configuration, only for the server server.recovery.committingRetryPeriod=1000 server.recovery.asynCommittingRetryPeriod=1000 server.recovery.rollbackingRetryPeriod=1000 server.recovery.timeoutRetryPeriod=1000 server.maxCommitRetryTimeout=-1 server.maxRollbackRetryTimeout=-1 server.rollbackRetryTimeoutUnlockEnable=false server.distributedLockExpireTime=10000 server.xaerNotaRetryTimeout=60000 server.session.branchAsyncQueueSize=5000 server.session.enableBranchAsyncRemove=false #Transaction rule configuration, only for the client client.rm.asyncCommitBufferLimit=10000 client.rm.lock.retryInterval=10 client.rm.lock.retryTimes=30 client.rm.lock.retryPolicyBranchRollbackOnConflict=true client.rm.reportRetryCount=5 client.rm.tableMetaCheckEnable=true client.rm.tableMetaCheckerInterval=60000 client.rm.sqlParserType=druid client.rm.reportSuccessEnable=false client.rm.sagaBranchRegisterEnable=false client.rm.sagaJsonParser=fastjson client.rm.tccActionInterceptorOrder=-2147482648 client.tm.commitRetryCount=5 client.tm.rollbackRetryCount=5 client.tm.defaultGlobalTransactionTimeout=60000 client.tm.degradeCheck=false client.tm.degradeCheckAllowTimes=10 client.tm.degradeCheckPeriod=2000 client.tm.interceptorOrder=-2147482648 client.undo.dataValidation=true client.undo.logSerialization=jackson client.undo.onlyCareUpdateColumns=true server.undo.logSaveDays=7 server.undo.logDeletePeriod=86400000 client.undo.logTable=undo_log client.undo.compress.enable=true client.undo.compress.type=zip client.undo.compress.threshold=64k #For TCC transaction mode tcc.fence.logTableName=tcc_fence_log tcc.fence.cleanPeriod=1h #Log rule configuration, for client and server log.exceptionRate=100 #Metrics configuration, only for the server metrics.enabled=false metrics.registryType=compact metrics.exporterList=prometheus metrics.exporterPrometheusPort=9898 transport.type=TCP transport.server=NIO transport.heartbeat=true transport.enableTmClientBatchSendRequest=false transport.enableRmClientBatchSendRequest=true transport.enableTcServerBatchSendResponse=false transport.rpcRmRequestTimeout=30000 transport.rpcTmRequestTimeout=30000 transport.rpcTcRequestTimeout=30000 transport.threadFactory.bossThreadPrefix=NettyBoss transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler transport.threadFactory.shareBossWorker=false transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector transport.threadFactory.clientSelectorThreadSize=1 transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread transport.threadFactory.bossThreadSize=1 transport.threadFactory.workerThreadSize=default transport.shutdown.wait=3 transport.serialization=seata transport.compressor=none
前面的配置中已经知道需要在数据库中创建表了,但是seata高版本中已经不自带SQL文件了,以下是在旧版本中拷贝过来的模板,在数据库中执行一下SQL文件,其中seata数据库的配置只需要执行一次即可,undo_log文件则需要在每个业务数据库下执行一次
seata库配置
drop database if exists seata; create database seata character set utf8 collate utf8_bin; -- -------------------------------- The script used when storeMode is 'db' -------------------------------- -- the table to store GlobalSession data CREATE TABLE IF NOT EXISTS seata.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_status_gmt_modified` (`status` , `gmt_modified`), KEY `idx_transaction_id` (`transaction_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; -- the table to store BranchSession data CREATE TABLE IF NOT EXISTS seata.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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。