Vertx HttpClientRequest - 无法捕获超时异常

时间:2017-02-09 13:49:31

标签: java httpclient vert.x vertx-httpclient

我一直无法捕捉到在我的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);
}

1 个答案:

答案 0 :(得分:1)

由于异步编程模型,您无法使用try-catch,因为您的方法在获得超时事件之前很久就已终止。为了捕获它,您需要设置一个异常处理程序,如:

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

如果您对捕获响应异常感兴趣,则适用同样的概念。