我希望创建一个服务,它向特定URL发出HTTP请求,如果它在1秒内没有得到结果,那么该请求将超时,然后它将重试另一个请求,最多重试3次。
如何在scala中实现这个?
我正在查看Akka HTTP和Play的WSClient的文档,但我发现它无处不在。
注意:如果请求在服务器上产生副作用,我希望不成功的请求产生无副作用。如何实现这种行为?它甚至可能吗?
据我了解你的问题,你需要做的是:
脚步
你可以在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(业务逻辑)