Java 使用Jersey Apache Client 4的多线程连接管理器

Java 使用Jersey Apache Client 4的多线程连接管理器,java,multithreading,apache-httpclient-4.x,jersey-client,Java,Multithreading,Apache Httpclient 4.x,Jersey Client,我使用Apache client 4库启动并运行了一个Jersey客户端,如下所示: private Client createClient() { ApacheHttpClient4Config cc = new DefaultApacheHttpClient4Config(); // boring stuff here return ApacheHttpClient4.create(cc); } 但这在默认情况下使用BasicClient ConnManager,它

我使用Apache client 4库启动并运行了一个Jersey客户端,如下所示:

private Client createClient() {
    ApacheHttpClient4Config cc = new DefaultApacheHttpClient4Config();
    // boring stuff here
    return ApacheHttpClient4.create(cc);
}
但这在默认情况下使用BasicClient ConnManager,它不允许多线程连接

ApacheHttpClient4Config Javadoc说,如果需要多线程操作,我需要将属性\u CONNECTION\u MANAGER设置为ThreadSafeClientConnManager实例。我可以这样做,它工作正常:

private Client createClient() {
    ApacheHttpClient4Config cc = new DefaultApacheHttpClient4Config();
    cc.getProperties().put(ApacheHttpClient4Config.PROPERTY_CONNECTION_MANAGER,
        new ThreadSafeClientConnManager());
    // boring stuff here
    return ApacheHttpClient4.create(cc);
}
但ThreadSafeClientConnManager已被弃用。这很烦人

更现代的版本是PoolghttpClientConnectionManager。但是,不幸的是,ApacheHttpClient4.create方法要求连接管理器是ClientConnectionManager本身的一个实现,PoolightTpClientConnectionManager没有实现该接口。因此,如果我尝试使用它,我的连接管理器将被忽略,我们将回到基本的客户端连接管理器


如何在不使用任何不推荐的东西的情况下使用线程安全客户端?

您可以按如下方式创建客户端,请参见:


你找到解决办法了吗?
    client = new ApacheHttpClient4(new ApacheHttpClient4Handler(HttpClients.custom()
            .setConnectionManager(new PoolingHttpClientConnectionManager())
            .build(), null, false));