java - 如何处理 HttpAsyncClient 异常

标签 java httpclient

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

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

  2. 如果我用每个新请求初始化 httpclient,会对性能产生什么影响?

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


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)
        }

    }

最佳答案

乍一看一切正常。我会摆脱 httpget.releaseConnection(),这是没有必要的。运行 close 语句将处理您需要的一切,并释放运行连接的线程。这回答了你的第三个问题;关闭连接将释放附加到它的资源。

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

关于java - 如何处理 HttpAsyncClient 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43487053/

相关文章:

java - 我可以使用正则表达式匹配特定字符的每三次出现吗?

java - HTTP 响应中的 XML

java - 异常---SingleClientConnManager : connection still allocated

Golang Http 客户端请求在自定义 Http 状态代码上失败

java - 如何从 POST 请求中检索 cookie?

java - 使用 Spring 的通用子类型的依赖注入(inject)

Java解压奇怪的字符(编码?)

java - Oracle 的 Java 7 for Mac OS X 是否有 com.apple.eawt.CocoaComponent 或类似组件?

java - HttpClient 在执行第二个请求时挂起

java - HttpClient 参数未添加到执行方法中