PoolingHttpClientConnectionManager 日志“total available”的含义

问题描述 投票:0回答:1

我正在使用 PoolingHttpClientConnectionManager 来配置可以发送到服务器的并发请求数,我的代码如下所示

private RestTemplate createRestTemplate(HttpHost proxy) throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
    CloseableHttpClient httpClient;
    PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
    connManager.setMaxTotal(20);
    connManager.setDefaultMaxPerRoute(10);

我在 logback 配置中启用了日志,例如

<logger name="org.apache.http.impl.conn.PoolingHttpClientConnectionManager" level="DEBUG"/>

测试时,日志看起来像这样

h.i.c.PoolingHttpClientConnectionManager : Connection request: [route: {tls}->http://xxxxx][total available: 0; route allocated: 1 of 10; total allocated: 1 of 20]

我可以猜出

route allocated
total allocated
的含义,但想知道
total available
意味着什么?这对于可用连接或其他东西没有意义,如果有关于此的文档,请告诉我,谢谢。

我找不到关于此的在线文档

java logging httpclient connection-pooling httpconnection
1个回答
0
投票

您提供的日志消息来自 Apache HttpClient 的 PoolingHttpClientConnectionManager 类,虽然它没有关于此日志消息格式的官方详细公共文档,但我可以提供一些上下文来帮助您了解这些值通常代表什么:

可用总数:这通常表示所有路由的连接池中当前可用的连接总数。在您的日志消息中,它显示“0”,这意味着此时没有可用的连接。

已分配的路由:这表示当前为特定路由分配的连接数。此上下文中的“路由”通常指目标主机和代理(如果有)的特定组合。例如,在您的日志中,路由显示为“{tls}->http://xxxxx”,这意味着它是通过 HTTP 代理的 TLS (HTTPS) 连接。

分配总数:这表示当前在所有路由上分配的连接总数。在您的日志消息中,它显示“1”,这意味着当前正在使用一个连接。

为了让您有更好的想法,让我们分解一下您的日志消息:

“连接请求:[路由:{tls}->http://xxxxx][可用总数:0;分配的路由:10 条中的 1 条;分配的总数:20 条中的 1 条]”

可用总数:0 - 目前池中没有所有路线的可用连接。

已分配路由:1 of 10 - 对于特定路由“{tls}->http://xxxxx”,已分配 1 个连接,您最多可以为此路由分配 10 个连接。

已分配总数:1 of 20 - 在所有路线中,当前分配有 1 个连接,您总共最多可以分配 20 个连接。 在您的配置中,您已设置最多 20 个连接,并且每条路由最多 10 个连接。这些设置的目的是限制特定主机或路由的并发连接数以及池中的连接总数,以防止服务器过载或耗尽系统资源。

虽然您找不到此日志消息格式的详细公共文档,但通常可以依靠这些解释来理解 PoolingHttpClientConnectionManager 生成的日志消息。

© www.soinside.com 2019 - 2024. All rights reserved.