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请求的主要内容,如果未能解决你的问题,请参考以下文章