我将 WildFly 服务器从 10 迁移到 16。它现在使用版本 3.6.3.Final 的 Resteasy-client,它使用版本 4.5.4 的 http-client。问题是当我从构建器创建restEasyClient 时,我无法在内部创建连接管理器,如下所示:
this.resteasyClient = new ResteasyClientBuilder()
.connectionPoolSize(DEFAULT_POOL_SIZE)
.maxPooledPerRoute(DEFAULT_POOL_SIZE)
.build();
如何从 ApacheHttpClient43Engine 引擎获取连接管理器?我的最终目标是从管理器获取 PoolStats,在我的例子中应该是 PoolingHttpClientConnectionManager [PoolingHttpClientConnectionManager#getTotalStats]。
我用来获取连接管理器的代码如下:
ApacheHttpClient43Engine engine = (ApacheHttpClient43Engine) resteasyClient.httpEngine();
ClientConnectionManager cm = engine.getHttpClient().getConnectionManager();
此方法 getConnectionManager() 已弃用,并且不会获取 HttpClientConnectionManager。
如何从我的restEasyClient 获取 PoolStats?
提前致谢
最佳答案
以这种方式构建 HTTP Client 时,您无法获取 RESTEasy 创建的 PoolingHttpClientConnectionManager
实例,原因是 engine.getHttpClient().getConnectionManager()
返回已弃用的 ClientConnectionManager
接口(interface)的不同实现。
相反,你可以做的是:
- 创建您自己的
org.jboss.resteasy.client.jaxrs.ClientHttpEngineBuilder
接口(interface)实现,扩展org.jboss.resteasy.client.jaxrs.ClientHttpEngineBuilder43
并覆盖createEngine(..)
方法:您只需委托(delegate)给 super.createEngine(..),但您可以存储作为第一个参数传递的HttpClientConnectionManager
实例,该实例应该成为您正在寻找的人。 - 然后您可以使用新的自定义 ClientHttpEngineBuilder 创建要在创建客户端时提供的 ClientHttpEngine:
ResteasyClientBuilder 构建器 = new ResteasyClientBuilder();
ClientHttpEngine customClientHttpEngine = newCustomClientHttpEngineBuilder().resteasyClientBuilder(builder).build();
this.resteasyClient = 构建者
.httpEngine(customClientHttpEngine)
.connectionPoolSize(DEFAULT_POOL_SIZE)
.maxPooledPerRoute(DEFAULT_POOL_SIZE)
.build();
- 稍后,您可以从自定义 ClientHttpEngineBuilder 访问连接管理器
希望这有帮助。
关于java - 使用 ApacheHttpClient43Engine RestEasy 客户端 v3.6.3.Final 时的 getConnectionManager(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58917970/