【问题标题】:How to validate is PoolingHttpClientConnectionManager is applied on jersey client如何验证 PoolingHttpClientConnectionManager 是否应用于球衣客户端
【发布时间】:2021-08-25 12:22:11
【问题描述】:

下面是我用于 jersey 客户端连接池的代码 sn-p。

ClientConfig clientConfig = new ClientConfig();
clientConfig.property(ClientProperties.CONNECT_TIMEOUT, defaultConnectTimeout);
clientConfig.property(ClientProperties.READ_TIMEOUT, defaultReadTimeout);
        
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(50);
cm.setDefaultMaxPerRoute(5);
clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, cm);

clientConfig.connectorProvider(new ApacheConnectorProvider());

如何验证我的客户端是否正在使用连接池? poolStats.getAvailable() 计数是确保的有效方法吗?在我的情况下,当我测试客户端时,此可用计数为 1。

【问题讨论】:

    标签: java jersey httpclient jersey-client


    【解决方案1】:

    是的,计数可以是 1,但要确认您可以尝试以下步骤。

    1. 您可以先添加一个在后台继续运行的线程,并以某个时间间隔(假设每 60 秒)打印 poolstats 的现有状态。您可以使用以下逻辑。确保您在以下作为后台线程的一部分运行的逻辑代码中引用了相同的 PoolingHttpClientConnectionManager 对象实例。
    2. 然后,尝试继续使用上述球衣客户端调用内部调用外部服务的逻辑(可能在 for 循环中)
    3. 您应该会看到打印了不同的日志(在您的线程逻辑中),这将确认 jersey 客户端实际上正在使用池配置。

    逻辑:

    PoolStats poolStats = cm.getTotalStats();
            Set<HttpRoute> routes = cm.getRoutes();
            if(CollectionUtils.isNotEmpty(routes)) {
                for (HttpRoute route : routes) {
                    PoolStats routeStats = poolingHttpClientConnectionManager.getStats(route);
                    int routeAvailable = routeStats.getAvailable();
                    int routeLeased = routeStats.getLeased();
                    int routeIdle = (routeAvailable - routeLeased);
                    log.info("Pool Stats for Route - Host = {}, Available = {} , Leased = {}, Idle = {}, Pending = {}, Max = {} " ,
                            route.getTargetHost(), routeAvailable, routeLeased, routeIdle, poolStats.getPending(), poolStats.getMax());
                }
            }
    
            int available = poolStats.getAvailable();
            int leased = poolStats.getLeased();
            int idle = (available - leased);
            log.info("Pool Stats - Available = {} , Leased = {}, Idle = {}, Pending = {}, Max = {} " ,
                    available, leased, idle, poolStats.getPending(), poolStats.getMax());
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2014-05-15
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多