seata

Seata 还支持 TCC 和 Saga 模式,但支持的主要方式是 AT。(就是自动化事务,使用非常简单,对业务代码没有侵入性)

事务协调器 TC 维护全局和分支事务的状态,指示全局提交或者回滚。
事务管理者 TM 开启、提交或者回滚一个全局事务。
资源管理者 RM 管理执行分支事务的那些资源,向TC注册分支事务、上报分支事务状态、控制分支事务的提交或者回滚。

所有微服务本地事务都和TC有交互
TM发起全局事务-》TC 会生成一个全局事务ID(XID),并返回给TM->调用RM也会收到XID,然后把自己的事务注册到 TC,作为这个 XID 下面的一个分支事务,并且把自己的事务执行结果也告诉 TC。

全局事务的回滚是如何实现的呢? Seata 有一个重要的机制:回滚日志。主动插入反修改逻辑日志到 undolog
RM 是怎么自动和 TC 交互的?是通过监控拦截JDBC实现的,例如监控到开启本地事务了,就会自动向 TC 注册、生成回滚日志、向 TC 汇报执行结果。
二阶段回滚失败怎么办? 有一个微服务挂掉了,那么所有正常的微服务也都不会执行回滚,当这个微服务重新正常运行后,TC 会重新执行全局回滚。

seata下载源码和bin https://www.jianshu.com/p/dc4c6aec1d42
seata安装部署 https://blog.csdn.net/u012586389/article/details/117567404
修改file.conf 存储db  registry.conf修改注册中心
在源码包下面导入nocos配置和sql!!! 
运行bat  或者sh启动

1.4.2 因为序列化问题导致事物不回滚
bootstrap.yml配置文件不加载问题。引入依赖
创建undo_log 


TC、TM、RM三个组件完成:全局事务管理者、事务发起方、事务的参与方

Seata二阶段提交(AT模式)的原理
TM开启分布式事务(TM向TC注册全局事务记录)
按业务场景,编排数据库、服务等事务内资源(RM向TC汇报资源准备状态)
TM结束分布式事务,事务一阶段结束(TM通知TC提交/回滚事务)
TC汇总事务信息,决定事务是提交还是回滚
TC通知所有的RM提交或回滚资源,事务的二阶段结束。

global_table: 每当有一个全局事务发起后,就会在该表中记录全局事务的ID。
branch_table: 记录每一个分支事务的ID,分支事务操作的哪个数据库等信息
lock_table:用于申请全局锁。
UNDO_LOG表中插入SQL执行前后的相关信息(JSON字符串),用于二阶段回滚

@GlobalTransactional(rollbackFor = RuntimeException.class)!!!

<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
	<exclusions>
		<exclusion>
			<groupId>io.seata</groupId>
			<artifactId>seata-spring-boot-starter</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>io.seata</groupId>
	<artifactId>seata-spring-boot-starter</artifactId>
	<version>1.4.2</version>
</dependency>

// 手动回滚
GlobalTransactionContext.reload(RootContext.getXID()).rollback();
在服务链路的每个服务接口中都加上绑定XID的代码,必须保证这些服务绑定的都是同一个XID,XID在开启全局事务时会自动生成

#seata分布式事务配置(AT模式)
seata.enabled=true
seata.application-id=${spring.application.name}
#客户端和服务端在同一个事务组
seata.tx-service-group=my_test_tx_group
seata.enable-auto-data-source-proxy=true
seata.service.vgroup-mapping.my_test_tx_group=default
seata.config.type=nacos
#public是命名是命名空间名称,导致疯狂拉去配置,需删除namespace=public
#seata.config.nacos.namespace=public
seata.config.nacos.serverAddr=127.0.0.1:8848
seata.config.nacos.group=SEATA_GROUP
seata.config.nacos.username=nacos
seata.config.nacos.password=nacos
seata.registry.type=nacos
seata.registry.nacos.application=seata-server
seata.registry.nacos.server-addr=127.0.0.1:8848
seata.registry.nacos.group=SEATA_GROUP
seata.registry.nacos.namespace=public
seata.registry.nacos.username=nacos
seata.registry.nacos.password=nacos
seata.registry.nacos.cluster=default
client.undo.logSerialization = kryo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值