Как обработать UndeliverableException ошибку, выданную через blockingFirst () в Micronaut? - PullRequest
0 голосов
/ 02 мая 2019

Ниже приведен фрагмент веб-службы моего микронавта:

      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.

Любая помощь приветствуется.

...