使用 ApacheHttpClient43Engine RestEasy 客户端 v3.6 时的 getConnectionManager()。3.Final
getConnectionManager() when using ApacheHttpClient43Engine RestEasy client v3.6.3.Final
我将我的 WildFly 服务器从 10 迁移到 16。它现在使用 3.6 版的 resteasy-client。3.Final 使用 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 客户端时获得 RESTEasy 创建的 PoolingHttpClientConnectionManager
实例,原因是 engine.getHttpClient().getConnectionManager()
returns 已弃用 ClientConnectionManager
接口.
你可以做的是:
- 创建您自己的
org.jboss.resteasy.client.jaxrs.ClientHttpEngineBuilder
接口实现,扩展 org.jboss.resteasy.client.jaxrs.ClientHttpEngineBuilder43
并覆盖 createEngine(..)
方法:您只需委托给 super.createEngine(..),但是您可以存储作为第一个参数传递的 HttpClientConnectionManager
实例,这应该是您要查找的内容。
- 然后您可以使用新的自定义 ClientHttpEngineBuilder 创建客户端时提供的 ClientHttpEngine:
ResteasyClientBuilder builder = new ResteasyClientBuilder();
ClientHttpEngine customClientHttpEngine = newCustomClientHttpEngineBuilder().resteasyClientBuilder(builder).build();
this.resteasyClient = builder
.httpEngine(customClientHttpEngine)
.connectionPoolSize(DEFAULT_POOL_SIZE)
.maxPooledPerRoute(DEFAULT_POOL_SIZE)
.build();
- 稍后,您可以从自定义 ClientHttpEngineBuilder 访问连接管理器
希望对您有所帮助。
您可以按照弃用提示创建自己的 PoolingHttpClientConnectionManager, configure it, keep a reference of it to work with and explicitly set it via setConnectionManager() of HttpClientBuilder to create a HttpClient 实例。
然后通过创建您自己的 ApacheHttpClient43Engine with the appropriate constructor and configure it via httpEngine() of ResteasyClientBuilder.
指示 RESTEasy 使用该 HttpClient 实例
PoolingHttpClientConnectionManager connectionManager =
new PoolingHttpClientConnectionManager();
connectionManager.setMaxTotal(DEFAULT_POOL_SIZE);
connectionManager.setDefaultMaxPerRoute(DEFAULT_POOL_SIZE);
HttpClient httpClient = HttpClientBuilder
.create()
.setConnectionManager(connectionManager)
.build();
ApacheHttpClient43Engine engine = new ApacheHttpClient43Engine(httpClient);
ResteasyClient resteasyClient = new ResteasyClientBuilder()
.httpEngine(engine)
.build();
connectionManager.getTotalStats();
我将我的 WildFly 服务器从 10 迁移到 16。它现在使用 3.6 版的 resteasy-client。3.Final 使用 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 客户端时获得 RESTEasy 创建的 PoolingHttpClientConnectionManager
实例,原因是 engine.getHttpClient().getConnectionManager()
returns 已弃用 ClientConnectionManager
接口.
你可以做的是:
- 创建您自己的
org.jboss.resteasy.client.jaxrs.ClientHttpEngineBuilder
接口实现,扩展org.jboss.resteasy.client.jaxrs.ClientHttpEngineBuilder43
并覆盖createEngine(..)
方法:您只需委托给 super.createEngine(..),但是您可以存储作为第一个参数传递的HttpClientConnectionManager
实例,这应该是您要查找的内容。 - 然后您可以使用新的自定义 ClientHttpEngineBuilder 创建客户端时提供的 ClientHttpEngine:
ResteasyClientBuilder builder = new ResteasyClientBuilder();
ClientHttpEngine customClientHttpEngine = newCustomClientHttpEngineBuilder().resteasyClientBuilder(builder).build();
this.resteasyClient = builder
.httpEngine(customClientHttpEngine)
.connectionPoolSize(DEFAULT_POOL_SIZE)
.maxPooledPerRoute(DEFAULT_POOL_SIZE)
.build();
- 稍后,您可以从自定义 ClientHttpEngineBuilder 访问连接管理器
希望对您有所帮助。
您可以按照弃用提示创建自己的 PoolingHttpClientConnectionManager, configure it, keep a reference of it to work with and explicitly set it via setConnectionManager() of HttpClientBuilder to create a HttpClient 实例。
然后通过创建您自己的 ApacheHttpClient43Engine with the appropriate constructor and configure it via httpEngine() of ResteasyClientBuilder.
指示 RESTEasy 使用该 HttpClient 实例PoolingHttpClientConnectionManager connectionManager =
new PoolingHttpClientConnectionManager();
connectionManager.setMaxTotal(DEFAULT_POOL_SIZE);
connectionManager.setDefaultMaxPerRoute(DEFAULT_POOL_SIZE);
HttpClient httpClient = HttpClientBuilder
.create()
.setConnectionManager(connectionManager)
.build();
ApacheHttpClient43Engine engine = new ApacheHttpClient43Engine(httpClient);
ResteasyClient resteasyClient = new ResteasyClientBuilder()
.httpEngine(engine)
.build();
connectionManager.getTotalStats();