我正在使用Apache HttpComponents 4.5.1。在Scala项目中,但是Scala不太可能是我的问题。这是一个JUnit 4样式测试。
@Test def closableHttpClientWithPoolingCmTest{
val poolingHttpConnectionManager: PoolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager()
poolingHttpConnectionManager setMaxTotal (12)
poolingHttpConnectionManager setDefaultMaxPerRoute (8)
def client = HttpClients custom () setConnectionManager (poolingHttpConnectionManager) build ()
for (i <- 0 to 12 ){
def response = client.execute(new HttpGet("http://www.yahoo.com"));
EntityUtils.consume(response.getEntity)
response.close();
}
}
该测试挂起,因为我们用尽了所有连接。我缺少什么?我消耗了实体并关闭了响应。除了
response
,我是否需要关闭其他任何东西?请帮忙。
最佳答案
您的客户定义应为val
而不是def
每次调用def
时都会评估client
,从而为每次调用创建一个新池。取而代之的是,使用val
您的池将被构造一次并重新使用。def client = HttpClients custom () setConnectionManager (poolingHttpConnectionManager) build ()
应该成为val client = HttpClients custom () setConnectionManager (poolingHttpConnectionManager) build ()