【问题标题】:How to create Jersey 2 client with Executor如何使用 Executor 创建 Jersey 2 客户端
【发布时间】:2017-08-19 09:13:42
【问题描述】:

我用下面的代码创建了一个 jersey 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))

使用 jersey 2 客户端。

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

【问题讨论】:

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


    【解决方案1】:

    我只是在挖掘源代码并找到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()
    

    【讨论】:

    • 嗯。不使用 ExecutorServiceProvider 接口是否可以做同样的事情?我有 ExecutorService 的实例,出于某种原因,我想直接注册而不用 ExecutorServiceProvider 包装。可能吗?
    猜你喜欢
    • 2016-11-21
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2014-03-10
    • 2023-03-12
    • 2018-11-09
    • 1970-01-01
    相关资源
    最近更新 更多