seata在OpenFeign fallback下不回滚事务
A通过openfeign调用B,并配置了fallback。
当B抛出异常的时候,B没有写入操作,但是A却写入了,并没有回滚。
当然去掉fallback后就可以回滚。请问这种情况怎么处理呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
A通过openfeign调用B,并配置了fallback。
当B抛出异常的时候,B没有写入操作,但是A却写入了,并没有回滚。
当然去掉fallback后就可以回滚。请问这种情况怎么处理呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
1. xid传递是怎么做的呢? 2. 判断feign返回是否成功,感觉有点入侵的逻辑。目前想到的方法,对于一些重要的写操作,直接在fallback的方法理抛异常,这样更没有入侵原逻辑
你这个问题我碰到过,有两种情况,第一种,回滚的话要确保xid是在传递的,否则不会有分布式事务。
第二,要在调用feign之后,判断返回,比如我们是统一了返回结构的,如果发生异常,调用端需要判断请求B服务是否成功,如果返回了code=错误,就要手动抛出异常,如果不想这么做,我记得有一个全局的熔断异常,捕获到之后进行回滚操作,但无论哪种方式,你都应该判断feign之后是否成功
我的理解是,要想回滚,seata服务端首先要收到异常,你用fallback把异常处理了,seata肯定就不会当异常处理了,也就不会回滚了。就相当于本地事务要想回滚,首先异常要抛出去,要让全局事务管理器知道有异常发生,如果你在方法内把异常try catch了然后不抛出去,事务管理器认为方法处理成功也就不会回滚了。