通过AOP动态管理Seata分布式事务
本文作者:FUNKYE(陈健斌),杭州某互联网公司主程。
前言
通过GA大会上滴滴出行的高级研发工程陈鹏志的在滴滴两轮车业务中的实践,发现动态降级的必要性是非常的高,所以这边简单利用spring boot aop来简单的处理降级相关的处理,这边非常感谢陈鹏志的分享!
可利用次demo项目地址
通过以下代码改造实践.
准备工作
1.创建测试用的TestAspect:
1 | package org.test.config; |
请注意上面的包名可改为你自己的service包名:
2.改动service代码:
1 | public Object seataCommit() { |
因为异常跟返回结果我们都会拦截,所以这边可以trycatch或者直接让他抛异常来拦截也行,或者直接判断返回结果,比如你的业务代码code=200为成功,那么就commit,反之在拦截返回值那段代码加上rollback;
进行调试
1.更改代码主动抛出异常
1 | public Object seataCommit() { |
查看日志:
1 | 2019-12-23 11:57:55.386 INFO 23952 --- [.0-28888-exec-7] org.test.controller.TestController : 拦截到需要分布式事务的方法,seataCommit |
可以看到已被拦截也触发了rollback了.
2.恢复代码调试正常情况:
1 | public Object seataCommit() { |
查看日志:
1 | 2019-12-23 12:00:20.876 INFO 23952 --- [.0-28888-exec-2] org.test.controller.TestController : 拦截到需要分布式事务的方法,seataCommit |
可以看到事务已经被提交了.
总结
更详细的内容希望希望大家访问以下地址阅读详细文档