SimpleClientHttpRequestFactory vs HttpComponentsClientHttpRequestFactory für die Http-Request-timeout mit RestTemplate?
Arbeite ich an einem Projekt, in dem ich brauche, um eine HTTP-URL-Aufruf zu meinem server, auf dem Restful-Dienst, die zurück die Antwort als JSON String
.
Unten ist mein main-code, der mit der Zukunft und callables:
public class TimeoutThreadExample {
private ExecutorService executor = Executors.newFixedThreadPool(10);
private RestTemplate restTemplate = new RestTemplate();
public String getData() {
Future<String> future = executor.submit(new Task(restTemplate));
String response = null;
try {
response = future.get(500, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return response;
}
}
Unten ist mein Task
Klasse implementiert die Callable
- Schnittstelle und verwendet die RestTemplate
:
class Task implements Callable<String> {
private RestTemplate restTemplate;
public Task(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public String call() throws Exception {
String url = "some_url";
String response = restTemplate.getForObject(url, String.class);
return response;
}
}
Anweisung Problem:
Wie man oben sehen kann, bin ich mit Standard-Art der Ausführung die URL mit RestTemplate
die nicht mit jeder Http-Anforderung timeout, so dass heißt, intern ist es mit -1
als read
und connection
timeout.
Nun, was ich Suche zu tun ist, ich möchte die Einrichtung Http-Request-timeout mit RestTemplate
in meinem obigen code effizient. Und ich bin nicht sicher, welche Klasse muss ich dafür verwende, kann ich sehen HttpComponentsClientHttpRequestFactory
und SimpleClientHttpRequestFactory
also nicht sicher, welchen muss ich verwenden?
Einem einfachen Beispiel auf basis meiner obigen code wird mir helfen, besser zu verstehen, wie der Http-Request timeout mit RestTemplate
.
Und auch nicht, meine Http-Request-timeout-Wert sollte sein weniger als die Zukunft timeout-Wert?
HttpComponentsClientHttpRequestFactory
vsSimpleClientHttpRequestFactory
. Die man zu verwenden?- Hat meine Http-Request-timeout-Wert sollte sein weniger als die Zukunft timeout-Wert?
InformationsquelleAutor AKIWEB | 2014-09-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig RestTemplate verwendet
SimpleClientHttpRequestFactory
das hängt davon ab, Standard-Konfiguration vonHttpURLConnection
.Können Sie so konfigurieren, dass Sie mithilfe der unten Attribute:
Wenn Sie verwenden möchten
HttpComponentsClientHttpRequestFactory
- es hat einen Verbindungs-pooling-Konfiguration, dieSimpleClientHttpRequestFactory
nicht haben.Einen Beispielcode für die Verwendung
HttpComponentsClientHttpRequestFactory
:requestFactory
in meinem obigen code-Basis effizient? Ich verstehe aus deinem Beispiel, wie es zu benutzen, aber wo muss ich passenrequestFactory
in meinem obigen code-Basis, da ich DI zum bestehen der RestTemplate.Es ist bis zu Ihnen, aber persönlich in unseren großen Projekten haben wir HttpComponentsClientHttpRequestFactory. Aber ich denke es sollte keine problem mit beiden Ansätzen. Mit
HttpComponentsClientHttpRequestFactory
Sie können konfigurieren Sie weitere Optionen, mit Ihren eigenenHttpClient
. Für die Verwendung in der Codebasis, geben Sie nur denHttpComponentsClientHttpRequestFactory
Beispiel wie der code, den ich schrieb, am Ende meiner AntwortSicher, ich bin denken mit
HttpComponentsClientHttpRequestFactory
. Ich Verstand nicht die Instanz, die Sie wollen mich zu bestehen? Wenn Sie ein Beispiel auf basis meiner code-Basis, dann würde ich besser verstehen, was meinst du damit?Finden Sie die aktualisierte Antwort, die Sie benötigen zum erstellen einer singleton-gemeinsame Instanz von
RestTemplate
seit seiner thread-sicher und schwer erstellt werden. PS: ich habe nicht getestet, der code.Vielen Dank für Bearbeiten. Jetzt verstehe ich klar, was du gemeint vorhin. Eine Letzte Frage, was ist der Unterschied zwischen
READ Timeout
vsConnection Timeout
hier?InformationsquelleAutor Õzbek