一、说明

此处只是简单的记录一下,使用了 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

seata代码控制回滚和临时挂起分布式事物的更多相关文章

  1. SVN代码的回滚二

    SVN代码的回滚: 不丢失新建的文件,获得最新的SVN版本控制.TortoiseSVN-ShowLog-选中你要回滚的版本-右键-Export,之后将修改的文件覆盖到你的最新版本,commit即可. ...

  2. git远程代码库回滚(webstorm下)

    git远程代码库回滚(webstorm下) 1. 场景 添加了一个文件[file-for-test.js]到git的控制下 进行了三次修改,并分别进行了三次commit,最后进行了一次push git ...

  3. git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚

    [git 删除本地分支] git branch -D br [git 删除远程分支] git push origin :br  (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退 ...

  4. git远程库代码版本回滚方法

    最近使用git时, 造成了远程库代码需要回滚到之前版本的情况,为了解决这个问题查看了很多资料. 问题产生原因: 提交了错误的版本到远程库. 以下是解决的方法, 供大家参考: 1.对本地代码库进行回滚 ...

  5. 【GIT】git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚

    [git 删除本地分支] git branch -D br [git 删除远程分支] git push origin :br  (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退 ...

  6. 【转】git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚

    转载自:http://m.blog.csdn.net/blog/lihongli528628/45483463 [git 删除本地分支] git branch -D br [git 删除远程分支] g ...

  7. tortoisegit 代码的回滚方式 --两种

    TortoiseGit有两种回滚代码方式, 一种是导出指定版本代码为zip格式,不影响源代码:另一种是直接在源代码上回滚, 指定版本之后写的代码都会被删除.下面分别介绍这两种方法: 首先进入版本日志对 ...

  8. jenkins之代码部署回滚脚本

    #!/bin/bash DATE=`date +%Y-%m-%d_%H-%M-%S` METHOD=$1 BRANCH=$2 GROUP_LIST=$3 function IP_list(){ if ...

  9. 利用PyCharm操作Github:仓库新建、更新,代码回滚

      Github是目前世界上最流行的代码存储和分享平台,而PyCharm是Python圈中最流行的IDE,它很好地支持了Git操作.本文将会介绍如何利用PyCharm来连接Github,同时演示Git ...

随机推荐

  1. jvm学习笔记:栈帧

    栈帧内的数据结构 局部变量表(Local Variables):记录非静态方法的this指针.方法参数.局部变量 操作数栈(Operand Stack):用于计算的栈结构 动态链接(Dynamic L ...

  2. Intel® QAT加速卡之Ring & Ring Bank

    1. QAT的应用模式 Intel 通讯系列芯片对于每种受支持的加速服务(加密,数据压缩),都支持以下应用模式: 内核模式,其中应用程序和加速服务都在内核中运行空间. 用户空间直接访问在用户空间中运行 ...

  3. aes加解密后续问题contentType不是application/json时候后台解析请求对象request

    一.post请求的三种content-type 1.application/x-www-form-urlencoded 主要用于如下:1.1: 最常见的POST提交数据方式.1.2:原生form默认的 ...

  4. 343 day08File类、递归

    day08[File类.递归] 主要内容 File类 递归 教学目标 [ ] 能够说出File对象的创建方式 [ ] 能够说出File类获取名称的方法名称 [ ] 能够说出File类获取绝对路径的方法 ...

  5. java设计模式,工厂,代理模式等

    javaEE设计模式: 工厂模式:主要分为三种模式: 定义:在基类中定义创建对象的一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟到子类中进行. 为什么要使用工厂模式: (1) 解耦 : ...

  6. linux设置防火墙规则-指定ip的访问权限

    vim /etc/sysconfig/iptables 可以把你当前的iptables规则放到/etc/sysconfig/iptables中,系统重启iptables时自动执行 1.查看 iptab ...

  7. css3 图片变黑白 filter

    /*图片黑白*/ .img-gray { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: gray ...

  8. python刷题第四周

    本周有所收获的题目: 第一题: 第4章-17 水仙花数(20 分) (20 分) 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身. 例如:153=1×1×1+5×5×5 ...

  9. sonar扫面代码总体流程

  10. 技术与艺术的结合,HMS Core让手机主题趣味丛生

    在9月23日晚举办的华为nova9系列新品发布会上,华为在发布nova9系列新机之外,还为观众展示了多款Harmony OS趣味主题.其中一款名为"翻滚吧牛奶"的应用主题看起来十分 ...