Я пытаюсь ответить фиктивным ответом, если клиент 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
- вызывается, потому что сам пул соединений выдает ошибку. Как мне с этим справиться?