【问题标题】:Play WS request times out sooner than withRequestTimeout播放 WS 请求超时比 withRequestTimeout 快
【发布时间】:2021-01-08 20:19:19
【问题描述】:

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

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

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

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

注意:

  1. 该应用程序在其他地方使用 Akka 演员。但此控制流中不涉及任何参与者。
  2. This post 接近但无济于事。

【问题讨论】:

    标签: scala playframework play-ws


    【解决方案1】:

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

    将以下内容放入应用程序的配置中(默认为 application.conf)应该可以解决问题。

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

    【讨论】:

    • 设置该配置没有帮助(相同的 TimeoutException 在 2 分钟。)。
    • 但是设置 play.ws.timeout.idle 确实解决了这个问题。谢谢@Levi Ramsey。如果您将其包含在答案中以供将来参考,我将不胜感激。
    猜你喜欢
    • 2022-11-08
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 2016-02-06
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多