如何处理HttpAsyncClient异常

时间:2017-04-19 05:26:05

标签: java httpclient

我想了解一些关于HttpAsyncClient的基本概念。

  1. 我这里没有使用连接池,在这里(1)或(2)关闭失败的http请求的正确方法是什么。

  2. 如果我使用每个新请求初始化httpclient,这里有什么性能影响?

  3. 我是否需要在finally块中关闭所有失败请求的连接,不这样做会有什么缺点?

  4. 
    RequestConfig config = RequestConfig.custom()
        .setConnectTimeout(3 * 1000)
        .setConnectionRequestTimeout(3 * 1000)
        .setSocketTimeout(30 * 1000)
        .build(); 
    
    CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
        .setDefaultRequestConfig(config)
        .build();
    
    httpclient.start();
    
    try {
    
        if (targetHost != null && httpget != null)
            response = httpclient.execute(HttpHost, HttpGet);
        catch (Exception e) {
    
            throw new CustomException("service.unavailable");
    
        } finally {
            if (httpget != null){
                httpget.releaseConnection(); (1)
                httpclient.close();(2)
            }
    
        }
    

1 个答案:

答案 0 :(得分:1)

乍一看,一切看起来都不错。我会摆脱httpget.releaseConnection(),没有必要。运行close语句将处理您需要的所有内容,并释放运行连接的线程。那种回答你的第三个问题;关闭连接将释放附加到它的资源。

至于每个请求初始化一个新连接;我不会那么关心资源,就像你要连接的服务器/网站的响应一样。打开任何Web请求都需要时间,而不是代表您,而是服务器并等待响应和事情发生。我会编写一个优化的函数来处理Web请求并为每个请求调用,因为它会打开一扇门,使其成为一个多线程应用程序,可以在其他人繁忙的情况下建立多个连接。