news 2026/7/23 13:42:26

5、Seata

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5、Seata

分布式事务 产生原因:

  • 由于service相互分离,没有协同,相互感知各自的状态,导致事务回滚出现问题

原理

  • RM(Resource Manager):用于直接执行本地事务的提交和回滚。
  • TM(Transaction Manager):TM是分布式事务的核心管理者。比如现在我们需要在借阅服务中开启全局事务,来让其自身、图书服务、用户服务都参与进来,也就是说一般全局事务发起者就是TM。
  • TC(Transaction Manager)这个就是我们的Seata服务器,用于全局控制,比如在XA模式下就是一个协调者的角色,而一个分布式事务的启动就是由TM向TC发起请求,TC再来与其他的RM进行协调操作。

TM请求TC开启一个全局事务,TC会生成一个XID作为该全局事务的编号,XID会在微服务的调用链路中传播,保证将多个微服务的子事务关联在一起;RM请求TC将本地事务注册为全局事务的分支事务,通过全局事务的XID进行关联;TM请求TC告诉XID对应的全局事务是进行提交还是回滚;TC驱动RM将XID对应的自己的本地事务进行提交还是回滚;


一、安裝

各个服务作为Seate的客户端,只需要导入依赖即可:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency>

然后添加配置:

seata:service:vgroup-mapping:# 这里需要对事务组做映射,默认的分组名为 应用名称-seata-service-group,将其映射到default集群# 这个很关键,一定要配置对,不然会找不到服务bookservice-seata-service-group:defaultgrouplist:default:localhost:8868

二、使用

开启分布式事务的方法上添加@GlobalTransactional注解:

@GlobalTransactional@OverridepublicbooleandoBorrow(intuid,intbid)

Seata会分析修改数据的sql,同时生成对应的反向回滚SQL,这个回滚记录会存放在undo_log 表中。所以要求每一个Client 都有一个对应的undo_log表(也就是说每个服务连接的数据库都需要创建这样一个表,这里由于我们三个服务都用的同一个数据库,所以说就只用在这个数据库中创建undo_log表即可),表SQL定义如下:

CREATETABLE`undo_log`(`id`BIGINT(20)NOTNULLAUTO_INCREMENT,`branch_id`BIGINT(20)NOTNULL,`xid`VARCHAR(100)NOTNULL,`context`VARCHAR(128)NOTNULL,`rollback_info`LONGBLOBNOTNULL,`log_status`INT(11)NOTNULL,`log_created`DATETIMENOTNULL,`log_modified`DATETIMENOTNULL,`ext`VARCHAR(100)DEFAULTNULL,PRIMARYKEY(`id`),UNIQUEKEY`ux_undo_log`(`xid`,`branch_id`))ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 4:55:09

混合检索的Dify响应时间优化全攻略(响应速度提升必看)

第一章&#xff1a;混合检索的 Dify 响应时间概述在构建基于大语言模型的应用时&#xff0c;Dify 作为低代码开发平台&#xff0c;提供了灵活的混合检索机制以提升查询响应效率。该机制结合了关键词匹配与向量语义检索&#xff0c;能够在保证召回率的同时优化整体响应时间。混合…

作者头像 李华
网站建设 2026/7/22 11:57:31

农业产量预测准确率提升80%?R语言模型融合的3个关键步骤

第一章&#xff1a;农业产量预测中R语言模型融合的背景与意义在现代农业数据科学中&#xff0c;精准预测作物产量对于优化资源配置、制定政策和保障粮食安全至关重要。随着气象、土壤、遥感等多源数据的积累&#xff0c;单一统计模型已难以充分捕捉复杂的非线性关系。R语言凭借…

作者头像 李华
网站建设 2026/7/19 21:41:30

揭秘Dify重排序算法:如何选择最优模型提升搜索相关性?

第一章&#xff1a;揭秘Dify重排序算法的核心机制Dify的重排序算法是其在检索增强生成&#xff08;RAG&#xff09;系统中实现精准响应的关键组件。该算法并非简单地对初始检索结果进行打分排序&#xff0c;而是通过语义相关性建模、上下文匹配度分析以及用户意图理解三重机制&…

作者头像 李华
网站建设 2026/7/23 13:24:31

你真的会用Dify Tesseract更新功能吗?这5个关键步骤必须掌握

第一章&#xff1a;Dify Tesseract 的更新机制Dify Tesseract 作为一款集成式低代码 AI 应用开发平台&#xff0c;其更新机制设计旨在确保系统稳定性与功能迭代的高效平衡。平台通过模块化架构实现核心组件与插件的独立更新策略&#xff0c;降低版本升级对线上服务的影响。自动…

作者头像 李华
网站建设 2026/7/22 10:14:27

专家亲授多模态Agent启动架构设计,确保Docker服务有序就绪的秘诀

第一章&#xff1a;多模态 Agent 的 Docker 启动顺序在构建基于多模态能力的智能 Agent 系统时&#xff0c;使用 Docker 容器化技术可以有效隔离依赖、提升部署一致性。然而&#xff0c;由于系统通常由多个服务组件构成&#xff08;如语音识别、图像处理、自然语言理解等&#…

作者头像 李华
网站建设 2026/7/21 23:06:59

LangChain4j框架学习

【JavaAI】一篇文章带你学会LangChain4j框架&#xff08;上&#xff09; 【JavaAI】一篇文章带你学会LangChain4j框架&#xff08;下&#xff09; LangChain4J-基础(整合Spring、RAG、MCP、向量数据库、提示词、流式输出) 官网&#xff1a;https://docs.langchain4j.dev/intr…

作者头像 李华