Seata 事务分组

项目地址:https://github.com/seata/seata
官网地址:https://seata.io/

Seata 事务分组:

1.什么是事务分组?

A:事务分组是 Seata 的资源逻辑,类似于服务实例。

service {
  #vgroup->rgroup
  vgroup_mapping.fsp_tx_group = "default"
  #only support single node
  default.grouplist = "127.0.0.1:8091"
  #degrade current not support
  enableDegrade = false
  #disable
  disable = false
  #unit ms,s,m,h,d represents milliseconds, seconds, minutes, hours, days, default permanent
  max.commit.retry.timeout = "-1"
  max.rollback.retry.timeout = "-1"
}

file.conf中,比如这种配置,这里的fsp_tx_group 就是一个事务分组。一个seata-server可以管理多个事务分组。

2.通过事务分组如何找到后端集群?

A:首先程序中配置了事务分组(GlobalTransactionScanner 构造方法的 txServiceGroup 参数),程序会通过用户配置的配置中心去寻找 service.vgroup_mapping. 事务分组配置项,取得配置项的值就是 TC 集群的名称。拿到集群名称程序通过一定的前后缀+集群名称去构造服务名,各配置中心的服务名实现不同。拿到服务名去相应的注册中心去拉取相应服务名的服务列表,获得后端真实的 TC 服务列表。

3.为什么这么设计,不直接取服务名?

A:这里多了一层获取事务分组到映射集群的配置。这样设计后,事务分组可以作为资源的逻辑隔离单位,当发生故障时可以快速 failover。

4.我有10个微服务,那我要分10个组吗 ?

A:分组的含义就是映射到一套集群,所以你可以配一个分组也可以配置多个。如果你其他的微服务有独立发起事务可以配置多个,如果只是作为服务调用方参与事务那么没必要配置多个。

5.不知道分组的目的是什么?那不管什么情况我始终就一个分组有没问题?

A:没问题,分组是用于资源的逻辑隔离,多租户的概念。

6.是不是一个事务中所有的微服务都必须是同一组才行?

A:没有这个要求的。但是不同的分组需要映射到同一个集群上。

7.你说的集群是指 TC 集群吗?现在 TC 如何集群,我看配置里都是 default。

A:那个名字可以自己取,如果用文件形式你可以写多个地址列表,多台 server 以 DB 方式存储通过 DB 共享数据。如果用注册中心就可以自己发现,注册的时候定义了集群名。

本文整理自Seata官方。

备注:log_status是1,1的是防御性的,是收到globalrollback回滚请求,但是不确定某个事务分支的本地事务是否已经执行完成了,这时事先插入一条branchid相同的数据,插入的假数据成功了,本地事务继续执行就会报主键冲突自动回滚。假如插入不成功说明表里有数据这个本地事务已经执行完成了,那么取出这条undolog数据做反向回滚操作。

Seata是一个易于使用的分布式事务解决方案,旨在使微服务架构中的事务管理变得简单。在Seata中配置事务分组主要是为了区分不同的事务分组,以便在同一个微服务应用中管理多个不同的Seata事务域。以下是配置Seata客户端以支持事务分组的一般步骤: 1. **配置文件准备**: 首先,需要准备Seata的配置文件`application.yml`或`application.properties`。通常这个配置文件位于资源目录(Resource directory)下。 2. **配置事务分组信息**: 在配置文件中,需要定义`tx-service-group`属性,该属性指定了所属的事务分组名称。这个分组名称将用于区分不同的事务分组。 ```yaml seata: enabled: true application-id: ${spring.application.name} tx-service-group: my_tx_group ``` 在上面的配置示例中,`my_tx_group`是自定义的事务分组名称。你可以根据实际业务需求定义不同的分组名称。 3. **注册到配置中心**(可选): 如果使用了配置中心(如Spring Cloud Config、Nacos、Apollo等),你需要在配置中心中注册相应的Seata配置,并确保Seata客户端可以从中读取配置。 4. **确保服务名一致**: `application-id`属性通常是Seata服务名,需要在服务注册与发现中心(如Eureka、Nacos等)中保持一致,以便Seata服务能够正确地注册和发现参与分布式事务的各个服务实例。 5. **重启Seata客户端服务**: 修改完配置文件之后,重启Seata客户端服务,使配置生效。 需要注意的是,Seata的版本不同,配置方式可能会有所变化,所以请根据使用的Seata版本查找相应的官方文档进行详细配置。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值