gpt4 book ai didi

java - 使用池连接管理器时,为什么我的 HTTPClient 连接耗尽?

转载 作者:行者123 更新时间:2023-12-01 11:00:51 34 4
gpt4 key购买 nike

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

每次调用 client 时都会评估

def,为每次调用创建一个新池。相反,使用val,您的池将被构造一次并重复使用。

def client = HttpClients custom() setConnectionManager(poolingHttpConnectionManager) build()

应该变成

val client = HttpClients custom() setConnectionManager(poolingHttpConnectionManager) build()

关于java - 使用池连接管理器时,为什么我的 HTTPClient 连接耗尽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33339396/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com