2015-06-07 20 views
8

Ich verwende Apache HttpClient in einem meiner Projekte. Ich verwende auch PoolingHttpClientConnectionManager zusammen mit meinem HttpClient.Was bedeuten setDefaultMaxPerRoute und setMaxTotal in HttpClient?

Ich bin verwirrt, was diese Eigenschaften bedeuten. Ich habe versucht, Dokumentation im Code durchzugehen, aber ich sehe keine Dokumentation zu diesen Variablen, die ich nicht verstehen konnte.

  • setMaxTotal
  • setDefaultMaxPerRoute
  • setConnectTimeout
  • setSocketTimeout
  • setConnectionRequestTimeout
  • setStaleConnectionCheckEnabled

unten, wie ich in meinem Code verwende:

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5 * 1000).setSocketTimeout(5 * 1000) 
     .setStaleConnectionCheckEnabled(false).build(); 
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(); 
poolingHttpClientConnectionManager.setMaxTotal(200); 
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(20); 

CloseableHttpClient httpClientBuilder = HttpClientBuilder.create() 
     .setConnectionManager(poolingHttpClientConnectionManager).setDefaultRequestConfig(requestConfig) 
     .build(); 

Kann mir jemand diese Eigenschaften erklären, damit ich verstehen und entscheiden kann, welche Werte ich dort hineinlegen sollte. Gibt es noch andere Eigenschaften, die ich verwenden sollte, wie oben gezeigt, um eine bessere Leistung zu erzielen?

ich http-Client bin mit 4.3.1

+0

Nun, wie kann das zu breit sein. Es sollte eine einzige Antwort geben für was ich frage? – john

Antwort

6

Einige Parameter werden erklärt bei http://hc.apache.org/httpclient-3.x/preference-api.html

Andere müssen von der Quelle zu entnehmen.

  • setMaxTotal

Die maximale Anzahl der über alle Routen erlaubten Verbindungen.

  • setDefaultMaxPerRoute

Die maximale Anzahl der Verbindungen für eine Route erlaubt, die sonst durch einen Aufruf setMaxPerRoute nicht angegeben wurde. Verwenden Sie setMaxPerRoute, wenn Sie die Route im Voraus kennen, und setDefaultMaxPerRoute, wenn Sie dies nicht tun.

  • setConnectTimeout

Wie lange warten, für eine Verbindung mit dem Remote-Server aufgebaut werden, bevor eine Timeout Ausnahme werfen.

  • setSocketTimeout

Wie lange warten, bis der Server auf verschiedene Anrufe zu reagieren, bevor eine Timeout Ausnahme werfen. Details finden Sie unter http://docs.oracle.com/javase/1.5.0/docs/api/java/net/SocketOptions.html#SO_TIMEOUT.

  • setConnectionRequestTimeout

Wie lange zu warten, wenn vor dem Auslösen eine Ausnahme eine Verbindung aus dem Verbindungspool zur Kasse versuchen (der Verbindungspool nicht sofort zurück, wenn zum Beispiel aller Verbindungen sind ausgecheckt).

  • setStaleConnectionCheckEnabled

Kann eine leichte Leistungssteigerung auf Kosten der potentiellen IOExceptions deaktiviert werden. Siehe http://hc.apache.org/httpclient-3.x/performance.html#Stale_connection_check

+1

Danke für die Hilfe. Ich habe in allen Punkten verstanden, 'setDefaultMaxPerRoute' zu ​​hinterlassen. Ich bin nur verwirrt auf "Routen" -Teil. Was bedeutet Route hier? – john

+0

Es handelt sich um eine HttpRoute-Instanz, die genauer unter http://hc.apache.org/httpcomponent-client-gga/httpclient/apidocs/org/apache/http/conn/routing/HttpRoute.html definiert wird, die einen Hostnamen oder angibt Adresse. Dies kann zum Beispiel verwendet werden, wenn Sie wissen, dass ein bestimmter Host von einer großen Anzahl von Verbindungen profitieren würde, aber Sie nicht eine große Anzahl von Verbindungen zu allen anderen Hosts zulassen möchten. – Pace