Как мне обрабатывать ошибки пула соединений в http4s? - PullRequest
1 голос
/ 25 мая 2020

Я пытаюсь ответить фиктивным ответом, если клиент http4s blaze не может подключиться к службе, но я не могу понять, как обрабатывать ошибки объединения.

Настройка пул соединений

import java.util.concurrent._

private val uncaughtExceptionHandler = new Thread.UncaughtExceptionHandler {
   // This should have handled it ideally? But this log never gets printed
   override def uncaughtException(t: Thread, e: Throwable) = {
      logger.error("Uncaught exception")
    }
  }

val executor: ExecutorService = new ForkJoinPool(
    Runtime.getRuntime().availableProcessors(),
    ForkJoinPool.defaultForkJoinWorkerThreadFactory,
    uncaughtExceptionHandler,
    true
)

и использование этого исполнителя пула для вызова REST API -

Выборка из URI

  val client = PooledHttp1Client(
        maxTotalConnections = 20,
        config = BlazeClientConfig.defaultConfig.copy(customExecutor = Some(Context.executor)) // same as the executor defined above
      )

    // Make a call
    client.fetch(Request(uri = uri)) { res =>
      {
        if (res.status.code === Status.Ok.code)
          // do something
        else
          // do something else
      }

Однако, если uri указано в client.fetch - недостижимая конечная точка, которую я не могу поймать.

Ошибка

ERROR org.http4s.client.PoolManager Error establishing client connection for key RequestKey(http,localhost:3000)
java.net.ConnectException: Connection refused

В результате я не могу ответить откатом, где client.fetch - вызывается, потому что сам пул соединений выдает ошибку. Как мне с этим справиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...