首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在事务中调用第二个服务时,该服务抛出一个异常。什么样的通用解决方案是可能的?

在事务中调用第二个服务时,该服务抛出一个异常。什么样的通用解决方案是可能的?
EN

Stack Overflow用户
提问于 2021-09-29 13:32:09
回答 1查看 58关注 0票数 0

我的问题在原理上是:

如果服务B成功响应(并保存了数据),初始transaction;

  • service A准备并将任何数据保存到DB

  • 服务A上,在服务B

  • 上发出一些(HTTP)请求,如果服务B抛出任何异常-服务A回滚事务

>G 211,则提交事务

问题是服务B反应缓慢,服务A捕获超时异常并回滚事务。不过,服务B处理了数据(尽管它没有及时作出答复)。如果服务A和服务B都保存和处理了数据,则该进程将被视为成功。在这种情况下,由于事务回滚,服务A的数据没有保存。

这个问题有什么普遍的解决办法吗?我关注2PC和基于事件的分布式事务机制(如saga模式)。寻求任何帮助/链接/等等。

EN

回答 1

Stack Overflow用户

发布于 2021-09-30 20:37:38

我通常通过将对Service的调用划分为“准备”和“提交”阶段来解决这个问题。这实际上是为服务层放置2PC,在“挂起”状态中插入记录,然后进行最后的调用来“激活”更改。

事实是,HTTP之上的REST对于事务的一致性并不是很好。在讨论潜在的长期运行过程时,使用最终的一致性模型要好得多。在Service之后放置一个消息队列,将更新排队起来,并让Service轮询完成(或者有一个回调)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69377436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档