java - 如何验证 PoolingHttpClientConnectionManager 是否应用于球衣客户端
问题描述
下面是我用于球衣客户端连接池的代码片段。
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,但要确认您可以尝试以下步骤。
- 您可以首先添加一个在后台继续运行的线程,并以某个时间间隔打印 poolstats 的现有状态,假设每 60 秒一次。您可以使用以下逻辑。确保您在以下作为后台线程的一部分运行的逻辑代码中引用相同的 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());
推荐阅读
- php - 删除多个文件
- symfony - TYPO3 9.5 - PLESK 17.8 - NGINX
- xamarin.forms - 如何为 Android 创建状态栏图标
- go - 如何将命名模板的结果发送到函数
- javascript - Javascript自下而上创建SVG路径与自上而下
- julia - 为什么 Julia Int64、Float64 和 boolean 支持 getindex
- c# - 如何使用 C# 代码直接打印水晶报表
- android - 尝试调用资源中的虚方法 res = getResources(); 当我尝试设置背景颜色时
- yii2 - 有没有办法在 yii2 的 Datacolumn 中将“主题”放入函数中:mailto ?
- node.js - 循环遍历大型JSON中的项目,修改它们并将它们一一插入到mongodb中的集合中的正确方法