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

Schreibe einen Kommentar