播放 WS 请求超时早于 withRequestTimeout

Play WS request times out sooner than withRequestTimeout

我正在发出生成 Future 的 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()
  }
}

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

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

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

注:

  1. 该应用在其他地方使用了 Akka actors。但是这个控制流中没有参与者。
  2. This post 接近但无济于事。

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

在您的应用程序配置中添加以下内容(默认情况下 application.conf)应该可以解决问题。

play.ws.timeout.request = 3 minutes
play.ws.timeout.idle = 3 minutes