Tcc下的幂等性笔记

本文介绍了Seata分布式事务框架在Tcc模式下如何通过幂等性工具类来防止SQL重复提交的问题。文章详细分析了在事务正常成功、本地事务失败和本地事务成功但全局事务失败三种情况下,幂等性是如何保证的,特别是在本地事务成功后的标记检查和删除机制,以确保重复提交或回滚时的幂等性。
摘要由CSDN通过智能技术生成

Seata作为广泛使用的分布式事务框架,在Tcc模式下存在sql重复提交的可能,在这里记录下个人感觉好使的一个简单地保证幂等性的工具类及使用方法.
这篇文章仅做个人笔记,有点乱 = =

1.背景

下面是Seata的Tcc模式的事务接口以及实现类.

1.1order接口

@LocalTCC
public interface OrderTccAction {
   
    /*
    第一阶段的方法
    通过注解指定第二阶段的两个方法名

    BusinessActionContext 上下文对象,用来在两个阶段之间传递数据
    @BusinessActionContextParameter 注解的参数数据会被存入 BusinessActionContext
     */
    @TwoPhaseBusinessAction(name = "orderTccAction",commitMethod = "commit",rollbackMethod = "rollback")
    boolean prepareCreateOrder(BusinessActionContext businessActionContext,
                               @BusinessActionContextParameter(paramName = "orderId") Long orderId,
                               @BusinessActionContextParameter(paramName = "userId") Long userId,
                               @BusinessActionContextParameter(paramName = "productId") Long productId,
                               @BusinessActionContextParameter(paramName = "count") Integer count,
                               @BusinessActionContextParameter(paramName = "money") BigDecimal money
    );
    // 第二阶段 - 提交
    boolean commit(BusinessActionContext businessActionContext);

    // 第二阶段 - 回滚
    boolean rollback(BusinessActionContext businessActionContext);
}

1.2order接口实现类

@Component
@Slf4j
public class OrderTccActionImpl implements OrderTccAction {
   
    @Autowired
    private OrderMapper orderMapper;
    @Transactional
    @Override
    public boolean prepareCreateOrder(BusinessActionCont
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值