seata在OpenFeign fallback下不回滚事务

发布于 2022-05-01 03:19:13 字数 117 浏览 835 评论 3

A通过openfeign调用B,并配置了fallback。

当B抛出异常的时候,B没有写入操作,但是A却写入了,并没有回滚。

当然去掉fallback后就可以回滚。请问这种情况怎么处理呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

姐不稀罕 2022-05-05 08:34:28

1. xid传递是怎么做的呢? 2. 判断feign返回是否成功,感觉有点入侵的逻辑。目前想到的方法,对于一些重要的写操作,直接在fallback的方法理抛异常,这样更没有入侵原逻辑

︶ ̄戏舞 2022-05-04 21:41:14

你这个问题我碰到过,有两种情况,第一种,回滚的话要确保xid是在传递的,否则不会有分布式事务。

第二,要在调用feign之后,判断返回,比如我们是统一了返回结构的,如果发生异常,调用端需要判断请求B服务是否成功,如果返回了code=错误,就要手动抛出异常,如果不想这么做,我记得有一个全局的熔断异常,捕获到之后进行回滚操作,但无论哪种方式,你都应该判断feign之后是否成功

活泼老夫 2022-05-04 00:21:05

我的理解是,要想回滚,seata服务端首先要收到异常,你用fallback把异常处理了,seata肯定就不会当异常处理了,也就不会回滚了。就相当于本地事务要想回滚,首先异常要抛出去,要让全局事务管理器知道有异常发生,如果你在方法内把异常try catch了然后不抛出去,事务管理器认为方法处理成功也就不会回滚了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文