Java 使用ApacheHttpClient43Engine RestEasy客户端v3.6.3.Final时的getConnectionManager()
我将我的WildFly服务器从10迁移到16。它现在使用版本3.6.3.Final的resteasy客户端,该客户端使用版本4.5.4的http客户端。问题是,当我从生成器创建restEasyClient时,无法在内部创建连接管理器,如下所示:Java 使用ApacheHttpClient43Engine RestEasy客户端v3.6.3.Final时的getConnectionManager(),java,httpclient,resteasy,apache-httpclient-4.x,Java,Httpclient,Resteasy,Apache Httpclient 4.x,我将我的WildFly服务器从10迁移到16。它现在使用版本3.6.3.Final的resteasy客户端,该客户端使用版本4.5.4的http客户端。问题是,当我从生成器创建restEasyClient时,无法在内部创建连接管理器,如下所示: this.resteasyClient = new ResteasyClientBuilder() .connectionPoolSize(DEFAULT_POOL_SIZE) .maxPo
this.resteasyClient = new ResteasyClientBuilder()
.connectionPoolSize(DEFAULT_POOL_SIZE)
.maxPooledPerRoute(DEFAULT_POOL_SIZE)
.build();
如何从ApacheHttpClient43Engine获取连接管理器?我的最终目标是从manager获取PoolStats,在我的例子中,它应该是PoolghttpClientConnectionManager[PoolghttpClientConnectionManager#getTotalStats]
我用于获取连接管理器的代码如下:
ApacheHttpClient43Engine engine = (ApacheHttpClient43Engine) resteasyClient.httpEngine();
ClientConnectionManager cm = engine.getHttpClient().getConnectionManager();
此方法getConnectionManager()已被弃用,无法获取HttpClientConnectionManager
如何从restEasyClient获取PoolStats
提前感谢在以这种方式构建HTTP客户端时,您无法获得由RESTEasy创建的
PoolightTPClientConnectionManager
实例,原因是引擎.getHttpClient().getConnectionManager()
返回不推荐的ClientConnectionManager
接口的不同实现
相反,您可以做的是:
org.jboss.resteasy.client.jaxrs.clienthttppenginebuilder
接口实现,扩展org.jboss.resteasy.client.jaxrs.clienthttppenginebuilder43
并覆盖createEngine(…)
方法:您只需委托给super.createEngine(…),但是您可以存储作为第一个参数传递的HttpClientConnectionManager
实例,它应该是您要查找的ResteasyClientBuilder=new ResteasyClientBuilder();
ClientHttpEngine customClientHttpEngine=newCustomClientHttpEngineBuilder().resteasyClientBuilder(builder.build();
this.resteasyClient=builder
.httpEngine(自定义ClientHttpEngine)
.connectionPoolSize(默认池大小)
.maxPooledPerRoute(默认池大小)
.build()代码>
稍后,您可以从自定义ClientHttpEngineBuilder访问连接管理器
希望这能有所帮助。以这种方式构建HTTP客户机时,您无法获得RESTEasy创建的PoolightTPClientConnectionManager
实例,原因是引擎.getHttpClient().getConnectionManager()
返回不推荐的ClientConnectionManager
接口的不同实现
相反,您可以做的是:
创建自己的org.jboss.resteasy.client.jaxrs.clienthttppenginebuilder
接口实现,扩展org.jboss.resteasy.client.jaxrs.clienthttppenginebuilder43
并覆盖createEngine(…)
方法:您只需委托给super.createEngine(…),但是您可以存储作为第一个参数传递的HttpClientConnectionManager
实例,它应该是您要查找的
然后,您可以使用新的自定义ClientHttpEngineBuilder创建创建客户端时要提供的ClientHttpEngine:
ResteasyClientBuilder=new ResteasyClientBuilder();
ClientHttpEngine customClientHttpEngine=newCustomClientHttpEngineBuilder().resteasyClientBuilder(builder.build();
this.resteasyClient=builder
.httpEngine(自定义ClientHttpEngine)
.connectionPoolSize(默认池大小)
.maxPooledPerRoute(默认池大小)
.build()代码>
稍后,您可以从自定义ClientHttpEngineBuilder访问连接管理器
希望这会有所帮助。您可以创建自己的实例,对其进行配置,保留要使用的引用,并通过的显式设置,以创建一个类似于弃用说明的实例
之后,只需指示RESTEasy使用该HttpClient实例,方法是使用适当的工具创建自己的实例,并通过进行配置
poollighttpclientconnectionmanager连接管理器=
新建PoollightTPClientConnectionManager();
setMaxTotal(默认池大小);
setDefaultMaxPerRoute(默认池大小);
HttpClient HttpClient=HttpClientBuilder
.create()
.setConnectionManager(connectionManager)
.build();
ApacheHttpClient43Engine=新ApacheHttpClient43Engine(httpClient);
ResteasyClient ResteasyClient=新的ResteasyClientBuilder()
.httpEngine(发动机)
.build();
connectionManager.getTotalStats();
您可以创建自己的实例,对其进行配置,保留要使用的引用,并通过的显式设置来创建一个,如弃用说明所示
之后,只需指示RESTEasy使用该HttpClient实例,方法是使用适当的工具创建自己的实例,并通过进行配置
poollighttpclientconnectionmanager连接管理器=
新建PoollightTPClientConnectionManager();
setMaxTotal(默认池大小);
setDefaultMaxPerRoute(默认池大小);
HttpClient HttpClient=HttpClientBuilder
.create()
.setConnectionManager(connectionManager)
.build();
ApacheHttpClient43Engine=新ApacheHttpClient43Engine(httpClient);
ResteasyClient ResteasyClient=新的ResteasyClientBuilder()
.httpEngine(发动机)
.build();
connectionManager.getTotalStats();
谢谢您的回复。但是当我使用定制引擎时,ResteasyClientBuilder的以下代码不起作用:.connectionPoolSize(默认\u POOL\u SIZE).maxPooledPerRoute(默认\u POOL\u SIZE)
通过查看ClientHttpEngineBuilder43类的源代码,我想我需要设置PoolghttpClientConnectionManager的maxTotal和maxPerRoute@