【问题标题】:Monitor connection pool of PoolingHttpClientConnectionManager监控 PoolingHttpClientConnectionManager 的连接池
【发布时间】:2018-12-20 17:06:42
【问题描述】:

我想监控一个 Apache httpComponents PoolingHttpClientConnectionManager 的连接池,但找不到访问它的方法。

我们使用以下构建器创建 HttpClient

HttpClient httpClient = HttpClientBuilder.create()
            .setMaxConnTotal(maxConnections)
            .setMaxConnPerRoute(maxConnectionsPerRoute)
            .build();

这会创建一个InternalHttpClient 的实例,它包含一个PoolingHttpClientConnectionManager 的实例,它包含一个CPool 的实例。

CPool 可以让我们访问T getRoutes()PoolStats getStats(T) — 这对我来说看起来很有希望。但我真的不知道如何访问这个CPool

HttpClient.getConnectionManager() 已弃用。 InternalHttpClient.getConnectionManager() 并没有被弃用,而是返回一个自定义的连接管理器,它只暴露了它背后真正的连接管理器实例的一些方法。

那么,如何访问这些统计信息?这些对我们很有帮助。

【问题讨论】:

    标签: apache-httpcomponents


    【解决方案1】:

    使用PoolingHttpClientConnectionManager实现的ConnPoolControl

    PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
    ConnPoolControl<HttpRoute> connPoolControl = cm;
    CloseableHttpClient client = HttpClients.custom()
            .setConnectionManager(cm)
            .build();
    

    【讨论】:

    • 谢谢!这样做并使用了connPoolControl.getStats(route)connPoolControl.getTotalStats()。这不是我原本打算做的,但我现在认为这是最好的方法。
    猜你喜欢
    • 2012-01-04
    • 2014-07-25
    • 2015-05-31
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多