Seata分布式事务解决方案
分布式有可能会带来很多额外的技术问题,如分布式事务,分布式锁,全局唯一ID等问题,假如从设计层面可以避免这些问题,建议还是从设计层面避免。
安装:
首先下载https://github.com/seata/seata/releases/ 1.4.2的版本,修改file.conf和registry.conf
下载源码https://gitee.com/jovic/seata, 建立seata数据库,执行script/server/db/mysql.sql
启动Eureka,然后启动\seata\seata-server-1.4.2\bin\seata-server.bat
Seata有3个基本组成部分:
A. 事务协调器(TC-Transaction Coordinator):维护全局事务和分支事务的状态,驱动全局提交或回滚。
B. 事务管理器(TM-Transaction Manager): 定义全局事务的范围, 开始全局事务,提交或回滚全局事务。
C.资源管理器(RM-Resource Manager):管理正在处理的分支事务的资源,与TC对话以注册分支事务并报告分支事务的状态,并驱动分支事务的提交或回滚。
Seata管理的分布式事务的典型生命周期:
-
TM要求TC开始一项新的全局事务。TC生成代表全局事务的XID。
-
XID通过微服务的调用链传播。
-
RM将本地事务注册为XID到TC的相应全局事务的分支。
-
TM要求TC提交或回退相应的XID全局事务。
-
TC驱动XID的相应全局事务下的所有分支事务以完成分支提交或回滚
案例:
下面看看下单->扣库存->扣账户余额这个流程,怎么解决分布式事务的问题,图示如下:
测试失败的Case, UserId 为1002 的用户下单,account-service会抛出异常导致事务回滚
http://127.0.0.1:8084/api/business/purchase/rollback
seata-server1.4.2的log可以看到事务回滚成功
测试成功的Case,UserId 为1001的用户下单,事务成功提交:
http://127.0.0.1:8084/api/business/purchase/commit
关注公众号“一米源码”回复“Seata”获取项目示例源码
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验