gpt4 book ai didi

java - 如果 REST Web 服务调用失败,是否应该使用消息或事件队列稍后重试?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:39:31 25 4
gpt4 key购买 nike

我正在构建一个带有 RESTful 接口(interface)的网络服务(我们称之为 MY_API)。此服务依赖于另一个 RESTful 网络服务来处理某些方面(称为 OTHER_API)。我想确定应该考虑使用哪些类型的最佳实践来处理 OTHER_API 的故障。

场景

我的用户界面是一个单页 javascript 应用程序。用户可以执行一些相当复杂的操作,用户很容易需要一两分钟才能完成。完成后,他们单击“保存”按钮并调用 MY_API 来保存数据。

MY_API 拥有保存用户提交的信息所需的一切。但是,必须执行一项由 OTHER_API 处理的操作。例如,OTHER_API 可能会处理发送电子邮件。或者它可能会处理将行项目添加到我的用户的帐单中。在这两种情况下,这些都是必须完成的关键事情,但它们不必现在发生,它们只需要最终发生。

如果 OTHER_API 失败,我不想简单地告诉用户他们的操作失败了,因为他们花了很多时间做这件事,这会使体验不尽如人意。

问题

  • 那么我应该创建某种消息或事件队列来将这些失败的 REST 请求保存到 OTHER_API 并在以后处理它们吗?
  • 关于保存 REST 请求以进行延迟处理的技术有什么意见或建议吗?
  • 是否有推荐的开源消息队列解决方案适用于使用基于 JSON 的 REST 网络服务的此类场景? Java 是首选,因为我的后端是用它编写的。
  • 我应该考虑其他技巧吗?

最佳答案

与其通过关注失败状态来解决这个问题,不如认识到这些操作应该异步执行并在 UI 请求的带外执行,这样会更快、更稳健。您确实应该使用消息/事件/作业队列,并尽快将这些作业直接放入该队列,并尽快响应原始请求。完成后,异步作业就可以独立于原始请求并按照自己的节奏执行——包括根据需要重试。

如果您希望您的 API 指示请求的某些方面尚未完成,您可以使用 HTTP 响应状态代码 202(已接受)

关于java - 如果 REST Web 服务调用失败,是否应该使用消息或事件队列稍后重试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4373215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com