我正在使用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 ()

09-10 09:44
查看更多