来点大佬,问下seata和feign的问题

sprouting 发布于 2020/12/04 16:50
阅读 1K+
收藏 0

公司打算做的先项目打算将seata整合进来,公司也没人搞过,也不认识啥大佬,文档已经快翻烂了,磕磕碰碰的终于搭建的差不多了,但现在还有几个问题实在没想明白,只能求助下大佬们了。

现在碰到的一个问题就是feign调用其他服务的时候,到底该返回一个什么才会触发回滚呢?

我单机做了多数据源进行切库操作的时候,手动抛出一个异常就可以将之前每个库添加进去的数据回滚了,但feign本质上就是对一个httpclient的封装,返回的还是一个http请求,按照之前的经验,A服务调用B服务,B服务执行,无论成功还是失败,都返回一个json,里面有一个状态表示这次请求的结果,那我这要怎么才能告诉A服务你该回滚还是正常执行呢?

还有在feign的调用,按照之前的经验,这里是要做统一异常处理的,那现在该怎么弄呢?

写的时候还想到一个问题,feign有重试机制,如果出现网络波动,第一次发送失败,第二次成功,但实际第一次成功了的,这会不会造成seata出问题呢?

加载中
0
永无境止
永无境止
SeataXid 这个是贯穿整个  Seata全局事务的唯一标识,各分支事务是基于它之上进行建立联系的,所以你每个微服务都需要在feign调用的时候 拿到SeataXid 并进行绑定当次事务,其次你说的事务回滚,这个是根据你自己的需要进行灵活处理的,例如JSON 结构中有个 是否回滚状态,如果标记为需要回滚,那么在你说的A调用B这个过程的 A微服务里面就需要进行全局事务回滚。
sprouting
sprouting
嗯,这个问题已经解决了,其实和feign没太大关系,直接抛出异常,B服务会检测到异常进行回滚,A服务如果安全起见,服务调用失败也手动抛异常,就会层层回滚
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部