如何使用 Executor 创建 Jersey 2 客户端

How to create Jersey 2 client with Executor

我用下面的代码创建了一个 jersey 2 客户端,

ClientConfig clientConfig = new ClientConfig();
clientConfig.property(ClientProperties.READ_TIMEOUT, 5000);
clientConfig.property(ClientProperties.CONNECT_TIMEOUT, 10000);
Client client =  ClientBuilder.newClient(clientConfig);       

我可以提出要求,一切正常。但是我想控制客户端执行线程的数量。在 jersey 1 中,我们可以有如下相同的实现,

Client client =  Client.create();
client.setConnectTimeout(5000);
client.setReadTimeout(10000);
client.setExecutorService(Executors.newFixedThreadPool(10));

我想复制同样的东西,

client.setExecutorService(Executors.newFixedThreadPool(10))

球衣 2 客户端。

经过一些搜索,我找到了 this 球衣 2。但是它是可用的 在最新版本的球衣 2 (2.26) 中。我正在使用 2.25.1 球衣版本。如何在 2.25.1 版本中实现相同的功能?

我只是在挖掘源代码并找到了 ExecutorServiceProvider and @ClientAsyncExecutor。如果你实现前者并用后者注释,只要请求是 异步 就应该使用你的执行器(我在你编辑之前注意到你正在寻找 synchronous) 并向客户端注册提供程序。

@ClientAsyncExecutor
static class MyExecutorServiceProvider implements ExecutorServiceProvider {

    @Override
    public ExecutorService getExecutorService() {
        System.out.println("Calling getExecutorService()");
        return Executors.newFixedThreadPool(10);
    }

    @Override
    public void dispose(ExecutorService executorService) {
        executorService.shutdown();
    }
}

Client client = ClientBuilder.newClient()
client.register(new MyExecutorServiceProvider());

Future<Response> res = client.target("test").async().get()