setMaxForRoute 在 ThreadSafeClientConnManager 中不起作用

2024-04-01

我一直在尝试使用 Apache HttpClient (4.1.3) 实现连接池并且ThreadSafeClientConnManager。当我尝试设置路由的最大连接数时,我遇到了一个问题。基本上我遵循的例子hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html。例如,我想将每个路由的默认连接设置为 10 个,并将某些路由的默认连接设置为 5 个连接。

ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(schemeRegistry);
cm.setMaxTotal(30);
cm.setDefaultMaxPerRoute(10);

HttpHost host = new HttpHost("hc.apache.org", 80, "http");
cm.setMaxForRoute(new HttpRoute(host, null, false), 5);

DefaultHttpClient httpClient = new DefaultHttpClient(cm);

然后我在线程中执行请求:

  public void run() {
        try {
            HttpResponse response = this.httpClient.execute(this.httpget, this.context);
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                // do something useful with the entity
            }
            // ensure the connection gets released to the manager
            EntityUtils.consume(entity);
        } catch (Exception ex) {
            this.httpget.abort();
        }
    }

并获取如下日志:

DEBUG Thread-0 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-4 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-1 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-7 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-3 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-5 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-8 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-2 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-6 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-0 [org.apache.http.impl.conn.tsccm.ConnPoolByRoute]: [HttpRoute[{}->http://hc.apache.org]] total kept alive: 0, total issued: 0, total allocated: 0 out of 30
DEBUG Thread-0 [org.apache.http.impl.conn.tsccm.ConnPoolByRoute]: No free connections [HttpRoute[{}->http://hc.apache.org]][null]
DEBUG Thread-0 [org.apache.http.impl.conn.tsccm.ConnPoolByRoute]: Available capacity: 10 out of 10 [HttpRoute[{}->http://hc.apache.org]][null]
DEBUG Thread-0 [org.apache.http.impl.conn.tsccm.ConnPoolByRoute]: Creating new connection [HttpRoute[{}->http://hc.apache.org]]

为什么我得到了Available capacity: 10 out of 10对于这条路线,但不是我指定的 5?

Thanks

UPD:如果我运行这个语句cm.getMaxForRoute(new HttpRoute(host, null, false))创建连接管理器后,它将返回 5。 但是,如果我尝试检查线程中路由的最大连接数(收到响应后):

HttpHost target = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
cm.getMaxForRoute(new HttpRoute(target));

连接管理器将返回与日志中相同的内容(10 个连接)。

我将不胜感激任何帮助。


这很奇怪,但是当我创建时效果很好HttpHost没有端口和协议参数。

HttpHost host = new HttpHost("hc.apache.org");
HttpRoute route = new HttpRoute(httpHost);
conman.setMaxPerRoute(route, 13);

PS:我用过httpclient-4.2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setMaxForRoute 在 ThreadSafeClientConnManager 中不起作用 的相关文章

随机推荐

  • 纯Python XSLT 库

    有没有纯Python 的XSLT 库 在我需要支持的某些平台上安装 libxml2 libxslt 或任何类似的 C 库是一个问题 我确实只需要基本的 XSLT 支持 速度不是主要问题 不幸的是 目前还没有纯 python XSLT 处理器
  • 提供语言服务的问题

    我发现了两种在互联网上提供语言服务的方法 第一种方式 http msdn microsoft com fr fr library vstudio bb166498 28v vs 110 29 aspx涉及使用IOleComponentMan
  • 将 Android 应用程序连接到远程数据

    谢什谈论的信息有限 我正在尝试让我的 Android 应用程序连接到在线数据库以访问信息 有相当多的信息 包括地理标签 这些信息将映射到我的应用程序上 开发者网站有非常丰富的信息 您可以使用网络 如果可用 在您自己的基于 Web 的服务上存
  • 将 PDF 表单数据接收到 PHP 中

    所以我在网上寻找了几个小时 我认为这是一个非常简单的答案 但我似乎找不到它 我试图了解 PDF 表单数据提交的工作原理 我的目标是读取从我设置到 PHP 脚本中的 PDF 表单提交的表单数据 我希望我的 PHP 脚本能够解析表单数据并将其插
  • Django 管理错误“WSGIRequest”对象没有属性“用户”

    我正在练习 Django 当我尝试去http localhost admin http localhost admin 我收到以下错误 我已检查 settings py 并且 MIDDLEWARE CLASSES 确实存在 是否还有其他原因
  • Apache NiFi 用于将数据从 RDMBS 导入到 HDFS - 与 SQOOP 的性能比较

    我们正在探索 Apache NiFi 作为满足我们企业需求的通用数据摄取工具 一种典型的数据摄取要求是从 RDBMS 移动数据 系统到 HDFS 我能够使用 NiFi 提供的GenerateTableFetch 和 ExecuteSQL 处
  • 混洗两个 __m128i 的 64 位部分的最佳方法

    我有两个 m128is a and b 我想进行洗牌 以便高 64 位a落在低 64 位dst和低 64 位b落在上64dst i e dst 0 63 a 64 127 dst 64 127 b 0 63 相当于 m128i dst mm
  • 使用 SPI 接口初始化 microSD 卡

    我正在使用一个microSD http en wikipedia org wiki Secure Digital Physical size卡采用嵌入式设计 该卡使用 SPI 接口连接到微控制器 它适用于我以前使用过的所有卡 但现在我的新卡
  • 具有负载平衡的高负载服务器,使用 WCF 和 MSMQ

    目前我正在开发一个空间数据处理服务器 以下是要求 服务器必须能够每秒接收和处理大约 150 200 条小消息 GPS 修复 一些附加数据 它必须是可扩展的 例如在多台机器上运行并平衡负载本身 没有nlb 目前我已经测试了这种架构 传入消息服
  • HTML 预处理器?

    是否有一个 HTML 预处理器可以进行类似的简单页面处理服务器端包括 http en wikipedia org wiki Server Side Includes 但是生成一组静态 HTML 页面 我认为它们被称为预处理器 http ht
  • ng-focus 和 ng-blur 不适用于选择 DOM

    首先 我创建一个简单的示例来查看 ng focus 和 ng blur 是否在 select 上拖动 然后是我的实际代码 我找不到为什么第二个不起作用 div div
  • 使用“灵活”类型参数与泛型类型进行模式匹配

    match value with list lt SomeType gt as l gt l Is it possible to match any list of a type derived from SomeType gt failw
  • 将 system.windows.forms 与 XNA 结合使用

    我正在制作一个使用 XNA 的游戏 我想向游戏添加一些内容 例如按钮 文本框 标签 工具提示文本以及 system windows forms 附带的其他内容 如何将 system windows forms 与 XNA 合并 我可以实现任
  • ubuntu 找不到系统 Java 编译器。确保您已安装 JDK(不仅仅是 JRE)

    在ubuntu 12上 我尝试运行fuse jna的示例程序 我收到以下错误消息 syed ubuntu Downloads fuse jna master examples hellofs sh hellofs compileJava F
  • .NET 应用程序内存使用量 - 未使用的 .NET 和非托管内存和碎片较多

    我正在使用 ANTS 内存分析器来诊断我的 NET 2 0 应用程序之一中遇到的内存泄漏增加情况 我在 7 5 小时内拍摄了该过程的 7 个快照 以下是所获得数据的表格表示形式 G1代表1代尺寸 G2代表2代尺寸 除了非托管空间和私有字节之
  • PHP 中的 zipArchive 打开错误

    无法在 PHP 中创建 zip 存档 总是返回Ziparchive ER MULTIDISK fileName SERVER DOCUMENT ROOT temp temp zip zip new ZipArchive err zip gt
  • Jquery - 遍历所有选中的单选按钮

    我有一个类似于下面的表格
  • 如何通过 Telegraf 监控目录的大小

    我们需要监控一个目录的大小 例如InfluxDB的数据目录 以便在Grafana中设置警报 正如这里提到的 如何配置 telegraf 将文件夹大小发送到 influxDB https stackoverflow com q 4427343
  • Dart:pub get 与 pub Upgrade

    根据pub get docs http pub dartlang org doc pub get html之间的主要区别pub get and pub upgrade is 如果锁定文件已存在 则 pub get 使用锁定在其中的依赖项版本
  • setMaxForRoute 在 ThreadSafeClientConnManager 中不起作用

    我一直在尝试使用 Apache HttpClient 4 1 3 实现连接池并且ThreadSafeClientConnManager 当我尝试设置路由的最大连接数时 我遇到了一个问题 基本上我遵循的例子hc apache org http