当前位置: 首页 > news >正文

Spring Cloud分布式事务快速上手(基于Seata AT模式,集成Nacos)--学习版

依赖的相关环境及组件

为了方便像我这样的小白快速上手,我只能踩着巨人的肩膀前进,本文中相关demo基本参考ruoyi-cloud官方文档中的示例(能参考别人的代码千万别自己动手写),只做了部分改造,方便验证;同时,微服务环境框架也是直接用的ruoyi-cloud,感谢每一位开源前辈无私无畏的奉献。

组件版本
ruoyi-cloudv3.6.6
Seata1.4.0
Nacos2.5.0

部署Seata-server(集成Nacos)

下载Seata-server

可以从GitHub仓库https://github.com/apache/incubator-seata/releases下载各版本的Seata-server(直达链接:Seata-server各Releases版本)。Windows下载解压后(.zip),直接点击bin/seata-server.bat就可以启动。

配置Seata-server,集成Nacos

使用Nacos作为注册中心及配置中心,需要修改Seata目录下conf/registry.con中的相关配置。由于使用Nacos作为注册中心,所以conf目录下的file.conf无需理会。主要修改两个地方,一个是registry.type改为nacos(默认是file),另一个是config.type改为nacos(默认是file);当然,registry.nacos,和config.nacos中需要修改成自己的环境,例如Nacos地址:127.0.0.1:8848,以及username和password,修改完成后,Seata-server就会使用Nacos作为注册中心和配置中心。

registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "nacos" loadBalance = "RandomLoadBalance" loadBalanceVirtualNodes = 10 nacos { application = "seata-server" serverAddr = "127.0.0.1:8848" group = "SEATA_GROUP" namespace = "" cluster = "default" username = "" password = "" } eureka { serviceUrl = "http://localhost:8761/eureka" application = "default" weight = "1" } redis { serverAddr = "localhost:6379" db = 0 password = "" cluster = "default" timeout = 0 } zk { cluster = "default" serverAddr = "127.0.0.1:2181" sessionTimeout = 6000 connectTimeout = 2000 username = "" password = "" } consul { cluster = "default" serverAddr = "127.0.0.1:8500" } etcd3 { cluster = "default" serverAddr = "http://localhost:2379" } sofa { serverAddr = "127.0.0.1:9603" application = "default" region = "DEFAULT_ZONE" datacenter = "DefaultDataCenter" cluster = "default" group = "SEATA_GROUP" addressWaitTime = "3000" } file { name = "file.conf" } } config { # file、nacos 、apollo、zk、consul、etcd3 type = "nacos" nacos { serverAddr = "127.0.0.1:8848" namespace = "" group = "SEATA_GROUP" username = "" password = "" } consul { serverAddr = "127.0.0.1:8500" } apollo { appId = "seata-server" apolloMeta = "http://192.168.1.204:8801" namespace = "application" apolloAccesskeySecret = "" } zk { serverAddr = "127.0.0.1:2181" sessionTimeout = 6000 connectTimeout = 2000 username = "" password = "" } etcd3 { serverAddr = "http://localhost:2379" } file { name = "file.conf" } }

上传配置至Nacos配置中心

在Nacos中新建配置,dataId为seataServer.properties,group为SEATA_GROUP(与Seata-server中config.nacos.group一致),配置内容参考https://github.com/apache/incubator-seata/tree/develop/script/config-center的config.txt并按需修改保存(直达链接:配置中心内容)。若不想手动复制,也可使用该链接目录下/nacos/nacos-config.sh或/nacos/nacos-config.py脚本导入到Nacos,这里主要修改两个地方,同时,由于后边将会搭建三个测试微服,这里需增加事务分组的配置(事务分组的具体解释请参考Seata官网 https://seata.apache.org/zh-cn/docs/v1.4/user/txgroup/transaction-group ):
如下修改为db,分布式事务的核心数据存储至数据库
store.mode=db
store.lock.mode=db
store.session.mode=db
以及配置数据库连接信息
store.db.driverClassName
store.db.url
store.db.user
store.db.password
增加事务分组配置,每个服务一个,一般都采用将key 值设置为服务端的服务名,有多少个微服务就添加多少行。
#后边会搭建账户、商品、订单三个测试微服务,这配置每个微服务的事务分组
service.vgroupMapping.ruoyi-account-group=default
service.vgroupMapping.ruoyi-order-group=default
service.vgroupMapping.ruoyi-product-group=default

#事务分组配置 service.vgroupMapping.ruoyi-account-group=default service.vgroupMapping.ruoyi-order-group=default service.vgroupMapping.ruoyi-product-group=default #For details about configuration items, see https://seata.io/zh-cn/docs/user/configurations.html #Transport configuration, for client and server 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 #Transaction routing rules configuration, only for the client service.vgroupMapping.default_tx_group=default #If you use a registry, you can ignore it service.default.grouplist=127.0.0.1:8091 service.enableDegrade=false service.disableGlobalTransaction=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 #Transaction storage configuration, only for the server. The file, db, and redis configuration values are optional. # 修改为db,分布式事务的核心数据存储至数据库 store.mode=db store.lock.mode=db store.session.mode=db #Used for password encryption store.publicKey= #If `store.mode,store.lock.mode,store.session.mode` are not equal to `file`, you can remove the configuration block. 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 #These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block. store.db.datasource=druid store.db.dbType=mysql store.db.driverClassName=com.mysql.jdbc.Driver # 配置数据库连接信息 store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true store.db.user=username store.db.password=password store.db.minConn=5 store.db.maxConn=30 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 #These configurations are required if the `store mode` is `redis`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `redis`, you can remove the configuration block. store.redis.mode=single store.redis.single.host=127.0.0.1 store.redis.single.port=6379 store.redis.sentinel.masterName= store.redis.sentinel.sentinelHosts= store.redis.sentinel.sentinelPassword= store.redis.maxConn=10 store.redis.minConn=1 store.redis.maxTotal=100 store.redis.database=0 store.redis.password= store.redis.queryLimit=100 #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.rollbackFailedUnlockEnable=false server.distributedLockExpireTime=10000 server.xaerNotaRetryTimeout=60000 server.session.branchAsyncQueueSize=5000 server.session.enableBranchAsyncRemove=false server.enableParallelRequestHandle=false #Metrics configuration, only for the server metrics.enabled=false metrics.registryType=compact metrics.exporterList=prometheus metrics.exporterPrometheusPort=9898
http://www.gsyq.cn/news/1611705.html

相关文章:

  • CAD 图纸批量处理:用 OpenClaw 实现图纸格式转换、批量打印、版本号自动标注
  • CPT Markets:把多语言支持做扎实,注重效率的使用者更容易感受到的框架
  • Manim 节奏控制指南 (Rate Functions)
  • 按照这个方法真的领到了8元,千问新用户专属220372
  • 数值优化方法:信任域与无导数技术详解
  • AI 建议用 Redis `SETNX` 防重复提交,为什么锁过期后仍可能创建两条记录
  • 6G网络中大模型技术与多模态感知通信的融合应用
  • FreeRTOS学习笔记(二)
  • 四川大学《微积分I-1》期末试卷及答案2016-2025学年PDF
  • 【车载 AOSP 16 蓝牙(bluedroid)服务】【qcom 平台双蓝牙】【13.耳机如何协商采样率:从 AVDTP 到 AAC 44100 的一条路】
  • YOLO目标检测论文实战指南:从模型改进到实验写作全流程
  • BetterJoy完整指南:让Switch手柄在PC游戏上完美运行
  • 告别泰拉瑞亚原版限制:tModLoader模组开发实战手册
  • Opencv延迟优化
  • 项目包含项目源码、项目文档、数据库脚本、软件工具等资料;
  • 欧姆龙NJ系列EtherCAT总线通信常用系统状态字
  • 【GitHub】 fastText:当“快“成为核心竞争力——从源码拆解 Facebook 的 10 亿词级 NLP 利器
  • 新版通达信多空主力拉升1主图2副1选股指标套装工具
  • 从厨房秤到智能称重:用STM32F103和HX711打造你的第一个物联网传感器节点
  • 别把RAG当架构:Ontology(本体)才是Agent的业务世界
  • 数组名的隐式转换规则
  • FPGA加速数字孪生:GRU算法与硬件优化实践
  • 2026 照片恢复教程|5 种零基础恢复技巧汇总,最后一个90%人不知道!
  • MFile:不止是Minio的“管理中介”
  • Keil MDK vs ARM-GCC(arm-none-eabi-gcc)完整区别
  • 关于ISACA第五届数字信任大会两大权威文件
  • 2026年AI写长篇小说工具终极测评:5款热门工具横评,长篇选手到底选哪个
  • 专访零数科技林乐:他为何坚信“数据利用”比“数据流通”更接近数字经济的本质?
  • 关于 Vaadin:专为企业级应用打造的 Java Web UI 框架
  • 批量处理远程共享目录中的特定类型文件(如 .hex、.csv 等)。