Scala - 使用超时重试HTTP请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala - 使用超时重试HTTP请求相关的知识,希望对你有一定的参考价值。

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

如何在scala中实现这个?

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

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

答案

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

脚步

  • 通过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(业务逻辑)

另一答案

你也可以使用akka模式的here

retry

以上是关于Scala - 使用超时重试HTTP请求的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud Fegin超时重试源码

使用服务工作者正确地以角度方式超时 HTTP 请求

Nacos Config连接超时重试

httpclient4怎么使用请求超时后的重试?

SpringCloud升级之路2020.0.x版-34.验证重试配置正确性

使用 Polly 实现复杂策略(超时重试)