播放 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 ms
在 application-akka.actor.default-dispatcher-3
线程中抛出)。
感谢有关如何将默认调度程序使用的 120 秒增加到 180 秒的任何指示。
注:
- 该应用在其他地方使用了 Akka actors。但是这个控制流中没有参与者。
- This post 接近但无济于事。
Play WS 包括全局请求超时,默认为 2 分钟。
在您的应用程序配置中添加以下内容(默认情况下 application.conf
)应该可以解决问题。
play.ws.timeout.request = 3 minutes
play.ws.timeout.idle = 3 minutes
我正在发出生成 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 ms
在 application-akka.actor.default-dispatcher-3
线程中抛出)。
感谢有关如何将默认调度程序使用的 120 秒增加到 180 秒的任何指示。
注:
- 该应用在其他地方使用了 Akka actors。但是这个控制流中没有参与者。
- This post 接近但无济于事。
Play WS 包括全局请求超时,默认为 2 分钟。
在您的应用程序配置中添加以下内容(默认情况下 application.conf
)应该可以解决问题。
play.ws.timeout.request = 3 minutes
play.ws.timeout.idle = 3 minutes