seate-2.1.0的实现(2.2.0也是差不多的)
2025-02-27 12:51:21 0 举报
AI智能生成
seate-2.1.0的环境配置、微服务集成,以及四种事务模式的说明和实现(2.2.0也是差不多的)
作者其他创作
大纲/内容
整合seata-2.1.0
官网下载seata,解压
打开conf/application.yml,根据实际情况修改配置
修改注册配置中心,默认file,可以改成nacos等,可以参考application.example.yml
还可以修改存储类型,保存TM向TC提交的信息,注册全局信息,包括分支事务的注册信息
其他seata配置根据自己的需要进行调整
基础配置信息
微服务集成
引入依赖
配置application.yml
AT
说明
二阶提交,非阻塞,默认使用
第一阶段提交数据,不阻塞不锁表,若发生异常,在第二阶段通过undo_log表进行回滚
优点
性能好
无代码侵入
缺点
数据弱一致性,只能保证最终一致
基于全局锁实现隔离
实现
在业务类上,对应事务方法增加注解即可@GlobalTransactional
TCC
说明
二阶提交,非阻塞,全手动编写
需要实现try、confirm、cancel三个阶段方法
优点
性能好
因为代码都是自己写的,所以有一些个性化的功能可以自己实现
缺点
需要手动编写大量代码,侵入性强
实现
在业务接口上,增加注解@LocalTCC
对应try方法上,增加注解
@TwoPhaseBusinessAction(name = "prepare", commitMethod = "commit", rollbackMethod = "rollback")
@TwoPhaseBusinessAction(name = "prepare", commitMethod = "commit", rollbackMethod = "rollback")
name是try方法名
commitMethod是confirm方法名
rollbackMethod是cancel方法名
在try方法中,可以通过RootContext.getXID()获取事务ID
在confirm和cancel方法中,可以通过BusinessActionContext.getXid()获取事务ID
在prepare方法中,可以定义注解@BusinessActionContextParameter(paramName = "param1"),注解参数可以在commitMethod和rollbackMethod方法中,通过上下文BusinessActionContext.getActionContext("param")读取
注意要在cancel实现空回滚,即判断try是否已执行(例如从数据库根据事务ID,查询是否存在数据),若未执行,则记录未执行状态或数据
要在try方法,避免业务悬挂,例如由于响应延迟或者重复执行,导致cancel先执行了,此时要判断是否数据是否已存在,若存在,则拒绝执行
Saga
说明
二阶提交,非阻塞
一阶段直接提交,二阶段只针对一阶段的失败做业务补偿
优点
无锁,性能最好
实现简单
缺点
最终一致性
事务之间无隔离,会出现脏写
实现
添加依赖seata-saga-engine
在resource目录下,创建json文件,定义saga状态机
实现服务及补偿方法
启动saga流程
stateMachineEngine.startWithBusinessKey
stateMachineEngine.startWithBusinessKey
XA
说明
二阶提交,基于数据库实现的分布式事务
第一阶段不提交数据,会阻塞请求,对涉及的表进行加锁,影响性能
优点
数据的强一致性
无代码侵入
事务之间完全隔离
缺点
性能差
实现
application.yml增加配置
在业务类上,对应事务方法增加注解即可@GlobalTransactional

收藏
0 条评论
下一页