Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ApacheHttpClient43Engine RestEasy客户端v3.6.3.Final时的getConnectionManager()_Java_Httpclient_Resteasy_Apache Httpclient 4.x - Fatal编程技术网

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

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

我将我的WildFly服务器从10迁移到16。它现在使用版本3.6.3.Final的resteasy客户端,该客户端使用版本4.5.4的http客户端。问题是,当我从生成器创建restEasyClient时,无法在内部创建连接管理器,如下所示:

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
    实例,它应该是您要查找的
  • 然后,您可以使用新的自定义ClientHttpEngineBuilder创建创建客户端时要提供的ClientHttpEngine:
  • 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@