我一直无法捕捉到在我的vertx HttpClientRequest中发生的异常。我在try-catch块中附上了我的连接并请求创建代码。我还添加了exceptionHandler和endHandler。但是当超时发生时,他们都没有被解雇。我收到的是以下错误消息,它将打印在控制台上。请告诉我如何捕获此异常,以便我可以使用相关信息回拨呼叫者。
io.vertx.core.http.impl.HttpClientRequestImpl 严重: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);
}
答案 0 :(得分:1)
由于异步编程模型,您无法使用try-catch
,因为您的方法在获得超时事件之前很久就已终止。为了捕获它,您需要设置一个异常处理程序,如:
request.exceptionHandler(t -> {
// where t is a throwable
// do something with it...
}
如果您对捕获响应异常感兴趣,则适用同样的概念。