Ниже приведен фрагмент веб-службы моего микронавта:
try {
val result = hClient.exchange(GET<String>("$readEndpoint/$token")).blockingFirst()
logger.error("result")
} catch (e: Exception) {
logger.error(e.message)
}
hClient
- это реактивный http-клиент, введенный как @Inject val hClient: RxHttpClient
Конечная точка выдает исключение «Сброс соединения по пиру».
Проблема, с которой я столкнулся
Даже если я включил код в try и catch, исключение io.reactivex.exceptions.UndeliverableException
выбрасывается и не перехватывается.
Я получаю два исключения: одно перехватывается блоком catch с сообщением Error occurred reading HTTP response: Connection reset by peer
, другое переходит на обслуживание с сообщением io.reactivex.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.nio.channels.ClosedChannelException
Воспроизводится с помощью кода ниже
Слишком малое время ожидания для получения ошибки времени ожидания.
micronaut:
http:
client:
read-timeout: 1s
@Controller("/")
class TokenController(
@Client("https://hello123456789.com/dummy") @Inject val hClient: RxHttpClient
) {
@Get("/test")
fun refresh(): String {
try {
val result = hClient.exchange(HttpRequest.GET<String>("/token/1234")).blockingFirst()
println("result")
} catch (e: Exception) {
println(e.message)
}
return ""
}
}
Гугл сказал мне, что мне нужно добавить глобальную ошибку onError в rxjava, но не смог найти, как это сделать в Micronaut.
Любая помощь приветствуется.