1

我正在发出一个产生未来的 Web 服务请求。像这样(简化复制):

import play.api.libs.ws.WSClient
import scala.concurrent.{ExecutionContext, Future}
import scala.concurrent.duration._
class Service(wsClient: WSClient)(implicit ec: ExecutionContext) {
  def callWebService() = {
    val req: WSRequest = wsClient.url(...).withRequestTimeout(180 seconds)...
    val respFuture:Future[Response] = req.execute()
  }
}

在 WSClient 放弃之前,被调用的 Web 服务有 180 秒的时间做出响应。

此服务类的客户端现在将其称为service.callWebService(). 当第三方 Web 服务花费 > 120 秒时,而不是等待 180 秒,未来会在 120 秒超时(线程java.util.concurrent.TimeoutException: Read timeout to localhost/127.0.0.1:8081 after 120000 ms中抛出application-akka.actor.default-dispatcher-3)。

感谢有关如何将默认调度程序使用的 120 秒增加到 180 秒的任何指示。

笔记:

  1. 该应用程序在其他地方使用 Akka 演员。但是这个控制流中没有参与者。
  2. 这篇文章很接近但没有帮助。
4

1 回答 1

1

Play WS包含一个全局请求超时,默认为 2 分钟。

将以下内容放入应用程序的配置中(默认情况下application.conf)应该可以纠正问题。

play.ws.timeout.request = 3 minutes
play.ws.timeout.idle = 3 minutes
于 2020-09-22T19:21:21.333 回答