1、目前只使用了Seata的AT模式,其特点是对业务无入侵,
2、Seata Server(seata-server-1.4.0)安装配置
- registry.conf用来配置服务注册中心和配置中心,注册中心使用nacos,使的seata server与seata client(业务程序)构建成集群,配置中心使用同样使用nacos,server和client共享seata配置
- 创建相应的seata数据库,并导入相关表结构global_table、branch_table、lock_table
- seata配置导入通过nacos-config.py脚本导入(其实就是往nacos里添加配置数据,通过Postman工具也可以,手动也可),注意脚本中for line in open('./config.txt'):的文件路径,config.txt的内容如下:
transport.type=TCP transport.server=NIO transport.heartbeat=true transport.enableClientBatchSendRequest=false 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 service.vgroupMapping.partner-dao-tx-group=default service.vgroupMapping.partner-tx-group=default service.vgroupMapping.provider-dao-tx-group=default service.vgroupMapping.provider-tx-group=default service.default.grouplist=127.0.0.1:8091 service.enableDegrade=false service.disableGlobalTransaction=false 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=false client.rm.sqlParserType=druid client.rm.reportSuccessEnable=false client.rm.sagaBranchRegisterEnable=false client.tm.commitRetryCount=5 client.tm.rollbackRetryCount=5 client.tm.defaultGlobalTransactionTimeout=60000 client.tm.degradeCheck=false client.tm.degradeCheckAllowTimes=10 client.tm.degradeCheckPeriod=2000 store.mode=db store.file.dir=file_store/data store.file.maxBranchSessionSize=16384 store.file.maxGlobalSessionSize=512 store.file.fileWriteBufferCacheSize=16384 store.file.flushDiskMode=async store.file.sessionReloadReadSize=100 store.db.datasource=druid store.db.dbType=mysql store.db.driverClassName=com.mysql.cj.jdbc.Driver store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true store.db.user=root store.db.password=root store.db.minConn=5 store.db.maxConn=30 store.db.globalTable=global_table store.db.branchTable=branch_table store.db.queryLimit=100 store.db.lockTable=lock_table store.db.maxWait=5000 store.redis.host=127.0.0.1 store.redis.port=6379 store.redis.maxConn=10 store.redis.minConn=1 store.redis.database=0 store.redis.password=null store.redis.queryLimit=100 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 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 log.exceptionRate=100 transport.serialization=seata transport.compressor=none metrics.enabled=false metrics.registryType=compact metrics.exporterList=prometheus metrics.exporterPrometheusPort=9898 |
2、Seata Client集成
- 引入maven依赖
- 将服务端配置的registry.conf放在resource目录下
- 每个服务的spring的yml配置文件中加入以spring.cloud.alibaba.seata.tx-service-group:partner-dao-tx-group。本项目中是直接在nacos的配置文件中加的
- 在服务中创建undo_log表
- 在业务方法中添加@GlobalTransactional注解即可
3、遇到的问题
一开始使用的spring-cloud-starter-alibaba-seata引入的seata,死活起不来,后来查看启动线程状态,发现有死锁。查看githup提交的PR说是确实有这个问题,说是需要引入1.5.0的快照版本,正式版本没发布,所以自己就引入的最新版本1.4.1,不过又出现了fileListener execute error:null的异常日志,还好程序能正常启动了,进行事务测试也正常,后来又试了下1.3.0的也不行。奇怪的一共5个服务模块,就其中的一个有问题,其他四个都没问题,和其中一个类似但正常的服务模块的配置文件进行比较,除了服务名称不一样,其他基本完全一样。看代码就是seata监听到fileconf有修改,进行了数据更新,BUT我服务端客户端都使用的nacos进行的数据配置,不知道为啥会触发FileListener,郁闷,好在不影响事务的正常使用。实在搞不懂,坐等新版本吧。
代码连接 https://github.com/buff0000/iot tag:v0.0.7