当前位置: 首页 > 面试题库 >

HttpClient 4.0.1-如何释放连接?

仇航
2023-03-14
问题内容

我遍历了一堆URL,对于每个URL,我都在执行以下操作:

private String doQuery(String url) {

  HttpGet httpGet = new HttpGet(url);
  setDefaultHeaders(httpGet); // static method
  HttpResponse response = httpClient.execute(httpGet);   // httpClient instantiated in constructor

  int rc = response.getStatusLine().getStatusCode();

  if (rc != 200) {
    // some stuff...
    return;
  }

  HttpEntity entity = response.getEntity();

  if (entity == null) {
    // some stuff...
    return;
  }

  // process the entity, get input stream etc

}

第一个查询很好,第二个查询抛出此异常:

线程“主”中的异常java.lang.IllegalStateException:无效使用SingleClientConnManager:仍然分配了连接。在分配另一个之前,请确保释放连接。在org.apache.http.impl.conn.SingleClientConnManager。$
1.getConnection(SingleClientConnManager.java:173)上的org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:199)…

这只是一个简单的单线程应用程序。如何释放此连接?


问题答案:

要回答我自己的问题:要释放连接(以及与请求关联的任何其他资源),必须关闭HttpEntity返回的InputStream:

InputStream is = entity.getContent();

.... process the input stream ....

is.close();       // releases all resources

来自文档



 类似资料:
  • 当我使用带有固定连接提供者的TCP客户端时,我不能重用连接。 他们使连接超过maxConnection变量。 这是我写的。 即使我使用10个maxConnection,比如“ConnectionProvider”。固定(“测试”,10)”,有22个空闲连接。天啊 //NettyClient.java //NettyClientTest。Java语言 14:55:27.397[reactor-tcp

  • 问题内容: 我在Redis中存储json数据列表,并使用ServiceStack c#客户端访问它。我本质上是在管理自己的外键,在其中存储id,然后使用应用程序内部的接口从中提取ID ,然后从Redis获取基础json对象并将其打包为列表以返回其他部分我的申请。 我正在使用,因为我希望Redis可以托管在与执行代码的服务器不同的服务器上。 我正在使用MSOpenTech Redis服务器在Wind

  • 我正在使用spring rest模板发送与apache http client 4.2.1集成的rest请求。 由于需要向多个服务器发送请求,增加了PoolingClientConnectionManager来管理连接。 当系统运行几天后,我们发现连接达到了最大每路由设置。 打印日志如下所示保持活动的总数:0;分配路线:5选5;分配总数:100个中的5个 似乎由于某种原因,连接没有被释放。但是当我

  • 我使用的是spring-webflux-5.2.8。释放,此操作“正常”: 返回错误时,不会出现任何问题,因为连接已被破坏,并且不会放回连接池: 调试r.n.resources。PooledConnectionProvider-[id:0xa23f78ad,L:/127.0.0.1:7524!R:localhost/127.0.0.1:8443]通道已关闭,现在有0个活动连接和0个非活动连接 但当

  • 我使用HttpClient(https://hc.apache.org/httpcomponents-client-4.5.x/index.html)使许多超文本传输协议调用背靠背和并行。运行一段时间后,它会得到这个异常: 我试图关闭所有我能看到的东西,但我一定还是错过了一些东西,因为它仍然有那个错误。 如何正确释放连接以避免此连接泄漏问题? 下面是重现问题的测试用例,在Windows上以Java

  • C3P0不会在事务完成后释放连接。下面是堆栈跟踪: 池配置和事务配置如下: 如有任何建议,我将不胜感激