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

时间:2017-08-19 09:13:42

标签: java rest glassfish jersey-2.0 jersey-client

我创建了一个带有以下代码的球衣2客户端

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

我能够提出要求,而且每件事情都可以。但我想控制客户端执行线程的数量。在球衣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版本中实现相同的目标?

1 个答案:

答案 0 :(得分:0)

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

@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()
相关问题