java - 使用 ApacheHttpClient43Engine RestEasy 客户端 v3.6.3.Final 时的 getConnectionManager()

标签 java httpclient resteasy apache-httpclient-4.x

我将 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)的不同实现。

相反,你可以做的是:

  1. 创建您自己的 org.jboss.resteasy.client.jaxrs.ClientHttpEngineBuilder 接口(interface)实现,扩展 org.jboss.resteasy.client.jaxrs.ClientHttpEngineBuilder43 并覆盖createEngine(..) 方法:您只需委托(delegate)给 super.createEngine(..),但您可以存储作为第一个参数传递的 HttpClientConnectionManager 实例,该实例应该成为您正在寻找的人。
  2. 然后您可以使用新的自定义 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/

    相关文章:

    java - Mapper 和 Reducer 之间的类型不匹配

    java - 什么库决定 SOAP 消息的序列化方式?

    java - 在 Quarkus 应用程序中注入(inject) ServletContext

    java - 如何使用 testng 标签进行冒烟、回归测试

    java - 多行 TextView ,从第二行开始编辑?

    java - 线程 "main"java.lang.NoSuchFieldError : INSTANCE 中的异常

    java - apache httpclient 并生成一个共享 session 的浏览器

    java - 如何使用 apache.httpcomponents.httpclient 在 Elasticsearch 中执行搜索模板

    xml - 使用 MOXy 避免循环,@XmlInverseReference @XmlID

    web-services - RESTEasy 客户端代理抢占式基本身份验证