Scala - 使用超时重试HTTP请求

问题描述 投票:1回答:2

我希望创建一个服务,它向特定URL发出HTTP请求,如果它在1秒内没有得到结果,那么该请求将超时,然后它将重试另一个请求,最多重试3次。

如何在scala中实现这个?

我正在查看Akka HTTP和Play的WSClient的文档,但我发现它无处不在。

注意:如果请求在服务器上产生副作用,我希望不成功的请求产生无副作用。如何实现这种行为?它甚至可能吗?

scala http request retry-logic
2个回答
1
投票

据我了解你的问题,你需要做的是:

脚步

  • 通过HTTP调用访问某些API的终点。
  • 如果响应未在1秒内到达,则需要获得异常。
  • 在异常情况下,您需要重新启动服务并再次发送请求。

你可以在Akka Http和Akka Actors的合作下做到这一点。

通过使用Akka actor,您可以告诉您的服务在获取TimeoutException时需要做什么。您可以通过Akka ask模式进行API调用。如果你将看到Akka的documnetation问模式here。它需要Akka ask timeout,你可以将其设置为你想要的任何值。如果你没有在超时中得到响应,你将得到AkkaAskTimeOutException,它将由你的孩子演员捕获,然后它将被传递给主管演员虽然Supervisor actor捕获异常,但我们可以使用supervison策略并指定需要完成的操作(重启,关闭,恢复等)。

监督策略:你可以读一下qazxsw poi。实际上以下是基于akka actor的应用程序的基本结构。

主管演员(我们在主管写监督策略),并且有儿童演员。

child1(业务逻辑)child2(业务逻辑)


0
投票

你也可以使用akka模式的here

retry
© www.soinside.com 2019 - 2024. All rights reserved.