2017-08-19 5 views
1

ich ein Trikot 2-Client mit dem folgenden Code,Wie Jersey 2-Client mit Executor

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

erstellt haben, erstellen Ich kann in der Lage zu machen Anfrage und alles funktioniert einwandfrei. Aber ich möchte die Anzahl der Client-Ausführungs-Thread steuern. In Jersey 1 können wir die gleiche Umsetzung wie unten haben,

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

ich die gleiche Sache, die repliziert werden soll

client.setExecutorService (Executors.newFixedThreadPool (10))

mit Trikot 2 Client.

Nach einigem Suchen fand ich this für Jersey 2. Aber es ist verfügbar in der neuesten Version von Jersey 2 (2.26). Ich benutze 2.25.1 Jersey-Version. Wie erreiche ich dasselbe für Version 2.25.1?

Antwort

0

Ich graben nur durch die Quelle und gefunden ExecutorServiceProvider und @ClientAsyncExecutor. Wenn Sie das erstere implementieren und es mit dem letzteren annotieren, sollte Ihr Executor verwendet werden, solange die Anforderung asynchron ist (Ich habe vor Ihrer Bearbeitung festgestellt, dass Sie nach synchrone gesucht haben) und Sie registrieren den Anbieter mit dem Client .

@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() 
+0

hmm. Ist es möglich, dasselbe zu tun, ohne die ** ExecutorServiceProvider ** Schnittstelle zu benutzen? Ich habe eine Instanz von ** ExecutorService ** und möchte mich aus irgendeinem Grund direkt ohne Wrapping mit ** ExecutorServiceProvider ** registrieren. Möglich? –