0

Ich bin ein Multi-Threaded-REST-Client zu schreiben, die verschiedenen APIs für verschiedene Zwecke verwendet, für diese Anforderungen machen ich ein Httpclient mit verschiedenen Methoden verwenden (GET, PUT, POST)Effiziente Weise Apache verwenden Httpclient

Thema 1:

DefaultHttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost(url); 
httpclient.execute(httppost); 


methodThatNeedsHttpClient(httpclient); 


public void methodThatNeedsHttpClient(HttpClient client) { 
//perform other GET/POST/PUT requests 
} 

Thema 2:

DefaultHttpClient httpclient2 = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost(url); 
httpclient2.execute(httppost); 
// Other methods 

ich gelesen, dass httpConnections für die Verwaltung, ich soll einen Connection Manager verwenden. Ich bin auf Version 4.5 des Clients, welchen Verbindungsmanager soll ich verwenden? Wie stellt der Verbindungsmanager sicher, dass Verbindungen nicht undicht sind und effizient genutzt werden?

Ich habe versucht, die folgende Implementierung:

PoolingClientConnectionManager connectionManager = new PoolingClientConnectionManager(); 
     connectionManager.setMaxTotal(5); 
// Perform REST operations 

client.getConnectionManager().shutdown(); 

Aber ich bin nicht sicher, wie Verbindungen im Pool verwaltet werden, für ein Multithreading-System, wird der Verbindungs-Manager in jedem Thread initialisiert werden?

Antwort

0

In den meisten Fällen sollte der Verbindungspool ein gemeinsamer sein, auf den alle httpClient-Instanzen zugreifen können.

Wenn Httpclient Erstellen

CloseableHttpClient httpClient = HttpClients.custom() 
       .setConnectionManager(connectionManager) 
       .setConnectionManagerShared(true) 
       .build(); 

Und das wird lassen Sie die Verbindung zurück zum Pool,

EntityUtils.consume(httpResponse.getEntity()); 

Während die Verbindung schließen,

httpResponse.close(); 
httpClient.close(); 

Da wir setConnectionManagerShared(true) haben httpClient.close() würde den Verbindungspool nicht herunterschalten.