Wie zu verwenden HttpComponentsClientHttpRequestFactory mit RestTemplate effizient?
Ich bin mit RestTemplate zusammen mit seiner Fabrik HttpComponentsClientHttpRequestFactory in einem meiner Projekte. In diesem Projekt, ich brauche, um eine Http-url-Aufruf zu meinem server, die ausgeführt wird, einen restful-Dienst, die zurück die Antwort als JSON-String.
Unten ist mein code -
public class GetUserClientData {
public String getData(KeyHolder keys) {
return new HTTPRequestAccess(keys).makeHttpRequest();
}
}
Unten ist meine Klasse, die umschließt die HttpClient-Teil -
public class HTTPRequestAccess {
//should this be static?
private RestTemplate restTemplate;
private KeyHolder keys;
private int timeout;
public HTTPRequestAccess(KeyHolder keys){
this(keys.getTimeoutValue()); //setting timeout to RestTemplate
this.keys = keys;
}
public HTTPRequestAccess(int timeout) {
this.timeout = timeout;
restTemplate = new RestTemplate(clientHttpRequestFactory());
}
private ClientHttpRequestFactory clientHttpRequestFactory() {
//is this not expensive that every time we are creating this new object?
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setReadTimeout(timeout);
factory.setConnectTimeout(timeout);
return factory;
}
public String makeHttpRequest() {
String response = null;
try {
//some logic here
String url = generateURL();
response = restTemplate.getForObject(url, String.class);
//some logic here
} catch (RestClientException ex) {
//log exception and do some stuff
} catch (Exception ex) {
//log exception
}
return response;
}
}
Sollte RestTemplate
und HttpComponentsClientHttpRequestFactory
statisch sein, hier in meinem HTTPRequestAccess
Klasse, als ob ich sehe es richtig, ich bin neu zu den ganzen connection-pool für jede Anfrage RestTemplate
das ist nicht der richtige Weg denke ich, weil jedes Werk hat connection-und thread-pool, und Sie sind ziemlich schweren Gegenstand, die ich Schätze.
Im Allgemeinen, was ist der beste Weg, um RestTemplate
zusammen mit seiner Fabrik HttpComponentsClientHttpRequestFactory
in einer multithreading-Umgebung? Ich denke RestTemplate
ist thread-sicher, aber ich glaube nicht, dass HttpComponentsClientHttpRequestFactory
ist thread-sicher. Korrigieren Sie mich, wenn ich falsch bin? Ich werde ausgeführt werden diese Bibliothek unter der schweren Last.
Ich bin mit spring-web-3.2.8.RELEASE
version.
InformationsquelleAutor AKIWEB | 2015-04-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
In einem meiner Projekte, die ich erstellt hatte, eine statische Instanz HttpComponentsClientHttpRequestFactory und übergeben Sie es an jeden RestTemplate.
Obwohl, in hier, es wird vorgeschlagen, auch eine Globale Instanz des RestTemplate.
Vielleicht irrelevant, aber ein wichtiger Punkt ist der pass HttpClients.createDefault (), um Ihre HttpComponentsClientHttpRequestFactory bei der Konstruktion es da standardmäßig in diesem Werk verwendet system-Eigenschaften zu erstellen HttpClient für Ihr Werk und das kann dazu führen, eine Menge Schmerzen in der Produktionsumgebung.
Sie können auch Ihre benutzerdefinierten HttpClient.
InformationsquelleAutor Youness