http4s клиент возвращает частичную полезную нагрузку - PullRequest
0 голосов
/ 05 января 2019

Я использую AsyncHttpClient в http4s-0.19.0-M2, чтобы сделать клиентский вызов:

for {
    resp <- http.expectOr[String](GET(url)){ error =>
                error.as[String].map(body => throw new Exception(...)
            }
    _ <- doSomethingWithResponse(resp)
} yield ()

Иногда время ожидания удаленного конца истекает, и в журнале я вижу следующее:

java.util.concurrent.TimeoutException: Request timeout to remote.server.com after 60000 ms
    at org.asynchttpclient.netty.timeout.TimeoutTimerTask.expire(TimeoutTimerTask.java:43)
    at org.asynchttpclient.netty.timeout.RequestTimeoutTimerTask.run(RequestTimeoutTimerTask.java:50)
    at shade.cda.io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:670)
    at shade.cda.io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:745)
    at shade.cda.io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:473)
    at shade.cda.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Thread.java:748)

Однако, похоже, что doSomethingWithResponse() все еще вызывается, но с частичной строкой resp. Есть ли способ изменить это поведение так, чтобы вызов http.expectOr не удался, если он не может получить всю полезную нагрузку?

...