withRequestTimeout игнорируется в Playframework - PullRequest
0 голосов
/ 04 октября 2018

, когда я не могу установить тайм-аут, когда использую HTTP-клиент из игровой рамкиЭто мой код:

val request: Future[WSResponse] = WS
    .url(url)
    .withAuth(user, password, WSAuthScheme.BASIC)
    //5 minute timeout in milliseconds
    .withRequestTimeout(300000)
    .put("")

Это не выдаст мне ошибку, но запрос истечет через 2 минуты.Есть ли что-то еще, что нужно установить так, чтобы использовался тайм-аут?

Обновление: Я использую версию playframework 2.4.8.Похоже, что в этой версии есть следующая ошибка: https://github.com/playframework/playframework/issues/4846

Однако предлагаемое исправление не работает для меня.

val request: Future[WSResponse] = WS
    .url(url)
    .asInstanceOf[NingWSRequest]
    .copy(requestTimeout = Some(-1))
    .withAuth(user, password, WSAuthScheme.BASIC)
    .withRequestTimeout(-1)
    .put("")

Оба предоставят мне тайм-аут после 2 минут.

1 Ответ

0 голосов
/ 04 октября 2018

Я не могу гарантировать, что это сработает для вас, но, похоже, это сработает для меня, и вы могли бы его адаптировать:

val httpClient = Try(WS.underlying.asInstanceOf[AsyncHttpClient])
  .getOrElse(throw new NotImplementedError("Unsupported HTTP client"))
val putBuilder = httpClient.preparePut(url)
putBuilder.setRequestTimeout(-1).addHeader(user, "Basic " + password)
val promise = Promise[Response]()
httpClient.executeRequest(putBuilder.build(),
  new AsyncCompletionHandler[Response] {
    def onCompleted(response: Response): Response = {
      promise.success(response)
      response
    }
    def onThrowable(t: Throwable): Unit = {
      promise.failure(t)
      super.onThrowable(t)
    }
  }
)

Удачи.

...