栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

seata代码控制回滚和临时挂起分布式事物

Java 更新时间:发布时间: 百科书网 趣学号

seata代码控制回滚和临时挂起分布式事物
  • 一、说明
  • 二、功能实现
    • 1、手动回滚分布式事物
    • 2、临时挂起分布式事物
  • 三、完整代码
  • 四 参考链接

一、说明

此处只是简单的记录一下,使用了 Seata后,如何手动 回滚分布式事物和临时挂起分布式事务,Seata的整合不做详细的说明。

二、功能实现 1、手动回滚分布式事物

举例:

  1. 比如我们通过feign去调用第三方服务,feign服务出现了降级。
  2. 调用第三方api,第三方api调用失败,是通过 错误吗 来告知是成功还是失败的。
class 手动回滚分布式事物{
    public void 部分代码() {
        if (RootContext.inGlobalTransaction()) {
            try {
                GlobalTransactionContext.reload(RootContext.getXID()).rollback();
            } catch (TransactionException e) {
                log.error("回滚分布式事物出现异常", e);
            }
        }
    }   
}

访问请求:

 $ curl -X GET http://localhost:50017/rollbackTx?accountId=1&amount=10&hasException=false 

结果:

  1. 当账户服务的返回值 <= 5 时,事物回滚,账户服务不扣钱,订单服务不产生订单
  2. 当账户服务的返回值 > 5 时,账户服务扣钱,订单服务产生订单
2、临时挂起分布式事物

举例:

  1. 在一个大的分布式事务中,如果分布式事物的某个环节出现了异常,通过 try{}catch(){}后,需要记录一个日志到数据库中,此处可能需要挂起这个分布式事务,让记录日志的方法不参与到分布式事务中。

下方这个案例是模拟下单操作,下单分为 账户服务扣钱和产生订单,此处将账户服务扣钱操作排除到分布式事务外,产生订单参与分布式事务。

class 临时挂起分布式事物 {
    
    @GlobalTransactional(rollbackFor = Exception.class)
    public void 部分代码(){
        String xid = RootContext.getXID();
        System.out.println("createAccountOrder:" + xid);
        // 解除 xid 的绑定
        RootContext.unbind();
        
        // 1、远程扣减账户余额
        // =============== 此方法不在分布式事务中=================
        boolean debitResult = remoteDebit(accountId, amount);
        // =============== 此方法不在分布式事务中=================
        
        // 重新绑定 xid
        RootContext.bind(xid);
        // 2、下订单
        orderService.createOrder(accountId, amount);
        // 抛出异常
        int i = 1 / 0;
    }
}

访问请求:

 $ curl -X GET http://localhost:50017/bindAndUnBind?accountId=1&amount=10&hasException=false 

结果: 账户服务扣钱,没有产生订单

三、完整代码

https://gitee.com/huan1993/spring-cloud-parent/tree/master/seata/seata-springboot-rollback-tx

四 参考链接

http://seata.io/zh-cn/blog/seata-spring-boot-aop-aspectj.html

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/276370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号