首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quarkus复原力最佳实践

Quarkus复原力最佳实践
EN

Stack Overflow用户
提问于 2022-03-11 10:46:35
回答 1查看 181关注 0票数 0

我有一个用例如下所示:

一个Quarkus微服务负责与其他几个固定API (例如ArgoCD REST、标准企业驱动API)交谈,以使整个系统处于所需的状态。

整个请求需要事务处理,这意味着所有API请求都需要成功,或者在发生任何错误时回滚。

如果API返回错误,情况对我来说是明确的。“只需恢复以前所做的一切”,但是如果我的Quarkus应用程序崩溃了,会发生什么呢?

举个例子:

Quarkus应用程序在端点上接收POST请求,该请求启动以下任务:

  1. 读取REST-API 1上的资源
  2. 在REST-API 2 (ArgoCD API)上创建一个资源
  3. 在REST-API 3(标准企业API)上创建资源

如果我的Quarkus应用程序在第二步之后死亡,它将使我的应用程序处于不一致的状态。

例如,我的第二个请求将使用它的REST创建一个application,如果第三个请求失败,我必须再次删除创建的应用程序,以使系统恢复到一致的状态。

上帝军方法在这里不适用,因为ArgoCD Rest没有实现上帝抵抗计划。

因此,至少,我必须在Quarkus应用程序中维护状态和补偿逻辑。但是,我需要将事务的状态保存在任何地方,以便在失败后从它恢复。

除了使用Redis数据库之外,我的当前解决方案还可以持久化每个事务的状态,直到它完成为止,但是我想知道是否遗漏了一些与我的用例匹配的标准解决方案。

EN

回答 1

Stack Overflow用户

发布于 2022-03-15 10:31:03

我认为要达到你想要的目标,没有简单的方法。当然,这取决于您的业务可接受的弹性或隔离级别。实际上,有一个专门的MicroProfile规范,名为上帝军 (长时间运行操作),仅用于解决这个问题。它是佐贺模式的实现。

问题是,仅仅依靠调用那些API上的回滚是不够的。如果那些回滚失败了,还有很多其他的情况。在这种情况下,总是需要有一名协调员来协调整个进程。您可以在上面的链接,甚至上帝军的Quarkus分机中读到更多关于它的信息。

我知道,如果您无法访问这些API的源代码来添加上帝抵抗军注解,就可能没有必要解决您的问题,但我希望它能给您一些关于人们通常解决这个问题的方法的想法。

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

https://stackoverflow.com/questions/71437324

复制
相关文章

相似问题

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