Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpClient、ConnectionManager和池限制_Java_Httpclient_Pool - Fatal编程技术网

Java HttpClient、ConnectionManager和池限制

Java HttpClient、ConnectionManager和池限制,java,httpclient,pool,Java,Httpclient,Pool,我的WebApp使用AWS S3服务作为一堆文件的存储。当一个请求进来时,一个合适的文件将通过Jets3t库从S3中获取,Jets3t库在后台使用ASF HttpClient。问题在于,HttpClient连接管理器使用了一些奇怪的池概念,强制设置每个路由的最大连接数限制以及一般的最大连接数限制。我习惯于根据新的需求调整它的大小,但在HttpClient中不这样做。所以,当达到池限制时,请求将被保留,直到连接空闲。这在某种程度上降低了我的WebApp的性能(S3服务离饱和还有一段距离) 我无法以

我的WebApp使用AWS S3服务作为一堆文件的存储。当一个请求进来时,一个合适的文件将通过Jets3t库从S3中获取,Jets3t库在后台使用ASF HttpClient。问题在于,HttpClient连接管理器使用了一些奇怪的池概念,强制设置每个路由的最大连接数限制以及一般的最大连接数限制。我习惯于根据新的需求调整它的大小,但在HttpClient中不这样做。所以,当达到池限制时,请求将被保留,直到连接空闲。这在某种程度上降低了我的WebApp的性能(S3服务离饱和还有一段距离)

我无法以任何方式控制到我的WebApp的请求量,因此,任何设定sane max连接限制的努力都是徒劳的。即使某些值在当前负载下可以正常工作,但当出现一些快速变化时(例如搜索引擎抓取的网站),该值也会失败

下面是我的问题:

  • HttpClient是否有任何(可能是第三方)连接管理器不执行此类限制

  • 如果它不存在,我是否可以让连接管理器报告连接池不足?如果根本没有希望,我希望每次在日志中看到一些消息时都调整最大连接限制


  • 如果有人愿意建议,我已经尝试过在每个请求线程中使用单独的库实例(从而使用HttpClient)。它工作得很好,尽管我想它会消耗更多的资源。如果克服最大连接限制的所有努力都将失败,我可能会使用这种方法。

    org.apache.http.impl.conn.poollighttpclientconnectionmanager
    实现了
    org.apache.http.pool.ConnPoolControl
    接口,该接口提供了获取当前连接池统计信息的方法:

    • PoolStats getTotalStats()
    • PoolStats-getStats(最终T路线)
    您可以构造传递给用于构建
    HttpClient
    org.apache.http.impl.client.HttpClientBuilder
    poollighttpclientconnectionmanager
    实例,因此您可以随时引用该实例来查询统计信息

    或者,您可以创建记录统计信息的
    poollighttpclientconnectionmanager
    子容器;e、 例如,在
    requestConnection()
    时间(但可能仅在每次第n次调用之后)