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...
}
Если вы заинтересованы в отлове исключений ответа, применяется та же концепция.