1

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

1 回答 1

2

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

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

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

于 2017-02-17T10:39:09.653 回答