spring seate实战2pc、3pc、tcc、saga(1)

本文介绍了Seata作为分布式事务解决方案的使用,包括2PC和3PC实战。通过@GlobalTransactional注解进行事务管理,确保数据一致性。在遇到异常时,Seata会自动回滚,保证系统稳定。3PC协议通过第三个阶段提升可靠性,但可能增加复杂性和影响性能。
摘要由CSDN通过智能技术生成

spring seate实战2pc、3pc、tcc、saga

seate使用2pc

Seata(Simple Extensible Autonomous Transaction Architecture)是一款开源的分布式事务解决方案。它支持基于Spring和Spring Boot的分布式事务,提供了高效可靠的事务管理和协调。

下面是使用Seata实现2PC(两阶段提交)的示例代码:

首先需要在代码中引入Seata相关依赖:

<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-all</artifactId>
    <version>${seata.version}</version>
</dependency>

在启动类中配置Seata的相关参数:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableTransactionManagement
public class AccountServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(AccountServiceApplication.class, args);
    }

    @Bean
    public DataSource dataSource() {
        // 配置数据源
    }

    @Bean
    public DataSourceProxy dataSourceProxy(DataSource dataSource) {
        return new DataSourceProxy(dataSource);
    }

    @Bean
    public GlobalTransactionScanner globalTransactionScanner() {
        return new GlobalTransactionScanner("account-service", "my_group");
    }
}

在需要进行分布式事务的方法上加上@GlobalTransactional注解:

@Service
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountMapper accountMapper;

    @Autowired
    private OrderServiceFeignClient orderServiceFeignClient;

    @Override
    @GlobalTransactional
    public void reduceBalance(Long accountId, BigDecimal amount) {
        // 扣减账户余额
        accountMapper.reduceBalance(accountId, amount);

        // 调用订单服务扣减订单金额
        orderServiceFeignClient.reduceAmount(amount);
    }
}

在这个示例代码中,通过@GlobalTransactional注解来声明需要进行分布式事务的方法,并在其中分别调用了扣减账户余额和扣减订单金额的方法。Seata会在这两个方法执行前后进行事务管理和协调,确保两个操作都能成功执行或者都能回滚。

当出现异常或者其他错误时,Seata会自动回滚所有已经执行的操作,保证数据的一致性。

spring seate实战2pc、3pc、tcc、saga

seate 3pc实战

3PC(Three-Phase Commit)是一种比2PC(Two-Phase Commit)更加可靠的分布式事务协议,它通过引入第三个阶段来减少2PC中的阻塞问题和单点故障。

以下是使用Seata实现3PC的示例代码:

首先需要在代码中引入Seata相关依赖,同2PC。

在启动类中配置Seata的相关参数,同2PC。

在需要进行分布式事务的方法上加上@GlobalTransactional注解,并指定type为3:

@Service

public class ProductService {

    @Autowired
    private ProductMapper productMapper;

    @Autowired
    private OrderServiceFeignClient orderServiceFeignClient;

    @GlobalTransactional(timeoutMills = 300000, name = "product-service-create-order", rollbackFor = Exception.class, type = "3")
    public void createOrder(OrderDTO orderDTO) {
        // 创建订单
        orderServiceFeignClient.createOrder(orderDTO);

        // 更新商品库存
        productMapper.updateStock(orderDTO.getProductId(), orderDTO.getAmount());
    }
}

在这个示例代码中,通过type=3来声明使用3PC协议。Seata会在分布式事务的执行过程中引入第三个阶段(CanCommit)来检查所有参与方的状态是否一致,从而避免了2PC中存在的单点故障和阻塞问题。

需要注意的是,3PC相对于2PC来说增加了一定的实现复杂度,同时在性能上也会有一定的影响。因此,在实际应用中需要根据具体业务需求和系统性能进行选择。

2PC是指两阶段提交协议(Two-Phase Commit),它是一种用于分布式事务的协议。在2PC中,有一个协调者和多个参与者,协调者负责协调各参与者的操作。2PC协议包括准备阶段和提交阶段。在准备阶段,协调者向参与者发送准备请求,参与者执行操作并将执行结果通知协调者。在提交阶段,协调者向参与者发送提交请求,参与者根据事务结果进行提交或回滚操作。然而,2PC存在数据不一致的问题,即协调者在发生故障时可能无法通知参与者进行回滚,从而导致数据不一致的情况发生。 3PC是指三阶段提交协议(Three-Phase Commit),它是对2PC的改进。3PC在2PC的基础上引入了超时机制,将准备阶段再次分为两个阶段,即CanCommit和PreCommit阶段。在CanCommit阶段,协调者向参与者发送询问消息,参与者根据当前状态回复同意或中止。在PreCommit阶段,协调者向参与者发送预提交消息,参与者执行预提交操作并将执行结果通知协调者。最后,在提交阶段,协调者向参与者发送提交或中止请求。3PC相对于2PC能够缓解数据不一致的问题,但并不能完全解决。 TCC是指试验-确认-取消协议(Try-Confirm-Cancel),它是一种分布式事务处理模式。TCC模式将整个事务拆分为三个阶段:试验阶段、确认阶段和取消阶段。在试验阶段,业务逻辑进行预处理并进行一些检查,以确保事务可以成功执行。在确认阶段,事务的所有参与者进行确认操作,如果所有参与者都确认成功,则事务执行成功。在取消阶段,如果有任何一个参与者确认失败,则事务执行取消操作,回滚之前的操作。TCC模式相对于2PC和3PC更加灵活,并且可以通过实现自定义的接口来适应不同的业务场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【分布式】分布式事务基础概念(2PC,3PCTCC)](https://blog.csdn.net/bookssea/article/details/124359341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [理解2PC,3PCTCC](https://blog.csdn.net/h_big_tiger/article/details/100139899)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值