Vertx HttpClientRequest - невозможно перехватить исключение тайм-аута

Мне не удалось отловить исключение тайм-аута, которое происходит в моем vertx HttpClientRequest. Я вложил свое соединение и запросил код создания в блоке try-catch. Также я добавил исключения Handler и EndHandler. Но ни один из них не будет уволен, когда истечет время ожидания. Все, что я получаю, это сообщение об ошибке ниже, которое печатается на консоли. Пожалуйста, дайте мне идею, как перехватить это исключение, чтобы я мог перезвонить звонящему с соответствующей информацией.

io.vertx.core.http.impl.HttpClientRequestImpl SEVERE: io.netty.channel.ConnectTimeoutException: истекло время ожидания соединения:

Код ниже - то, что я использую, чтобы сделать запрос к серверу. Как вы можете видеть, я использовал try-catch и добавил exceptionHandler.

try{
    HttpClient httpClient = Vert.x.createHttpClient(new HttpClientOptions().setSsl(true).setTrustAll(true).setVerifyHost(false));
    HttpClientRequest request = httpClient.get(port, host, uri.getRawPath(), event-> {
        event.exceptionHandler(e -> {
            log.error(" Error:: " + e);
        });
        event.handler(handler -> {
            //code
        });
    });                             
    request.putHeader(HttpHeaders.Names.AUTHORIZATION, "Basic "+authEnc);
    request.end();
} catch(Exception e){
    log.error(" Exception :: " + e);
}

1 ответ

Решение

Из-за модели асинхронного программирования вы не сможете использовать try-catch так как ваш метод давно завершен, прежде чем вы получите событие тайм-аута. Чтобы поймать его, вам нужно настроить обработчик исключений, например:

request.exceptionHandler(t -> {
  // where t is a throwable
  // do something with it...
}

Если вы заинтересованы в отлове исключений ответа, применяется та же концепция.

Другие вопросы по тегам