如何验证 PoolingHttpClientConnectionManager 是不是应用于球衣客户端

Posted

技术标签:

【中文标题】如何验证 PoolingHttpClientConnectionManager 是不是应用于球衣客户端【英文标题】: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。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

感谢您的回复。我遵循了类似的方式并能够对其进行测试。下面是我关注的文章。 baeldung.com/httpclient-connection-management

以上是关于如何验证 PoolingHttpClientConnectionManager 是不是应用于球衣客户端的主要内容,如果未能解决你的问题,请参考以下文章

如何“请进行人机身份验证”.在谷歌学术中进行搜索,显示“请进行人机身份验证”啥意思?如何验证呢。

如何验证或验证 JWT 签名?

表单验证 - jQuery 验证是不是足够以及如何巧妙地验证 PHP 中的数据?

如何针对 Firebase 验证身份验证令牌?

登陆时如何去掉验证码

如何使用 mbedtls 验证证书是不是验证密钥?