我正在使用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
之外,我还需要关闭其他任何内容吗?
请帮忙。
答案 0 :(得分:1)
您的客户定义应为val
而不是def
def
时都会对 client
进行评估,从而为每次调用创建一个新池。相反,使用val
,您的池将被构造一次并重复使用。
def client = HttpClients custom () setConnectionManager (poolingHttpConnectionManager) build ()
应该成为
val client = HttpClients custom () setConnectionManager (poolingHttpConnectionManager) build ()