SimpleClientHttpRequestFactory vs HttpComponentsClientHttpRequestFactory pour Http Request timeout avec RestTemplate?
Je suis en train de travailler sur un projet dans lequel j'ai besoin de faire une URL HTTP appel à mon serveur qui exécute le Service Restful qui retourne la réponse à la JSON String
.
Ci-dessous mon code principal qui est l'aide de l'avenir et 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;
}
}
Ci-dessous est mon Task
classe qui implémente l' Callable
interface et utilise le 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;
}
}
Énoncé Du Problème:
Comme vous pouvez le voir ci-dessus, je suis en utilisant la méthode par défaut de l'exécution de l'URL à l'aide de RestTemplate
qui permet de ne pas utiliser une Requête Http délai d'attente de sorte que les moyens en interne, c'est à l'aide de -1
comme le read
et connection
délai d'attente.
Maintenant ce que je cherche à faire, c'est que je veux mettre en place Http expiration du délai de Demande à l'aide de RestTemplate
dans mon code ci-dessus de manière efficace. Et je ne suis pas sûr de la classe-je utiliser pour que je puisse voir HttpComponentsClientHttpRequestFactory
et SimpleClientHttpRequestFactory
donc ne sais pas lequel je dois utiliser?
Toute simple exemple de base sur mon code ci-dessus va m'aider à mieux comprendre comment régler les Http expiration du délai de Demande à l'aide de RestTemplate
.
Et aussi mon Http Request timeout valeur doit être inférieure à l'avenir de la valeur timeout?
HttpComponentsClientHttpRequestFactory
vsSimpleClientHttpRequestFactory
. Lequel utiliser?- Mon Http Request timeout valeur doit être inférieure à l'avenir de la valeur timeout?
OriginalL'auteur AKIWEB | 2014-09-06
Vous devez vous connecter pour publier un commentaire.
Par défaut RestTemplate utilise
SimpleClientHttpRequestFactory
qui dépend de la configuration par défaut deHttpURLConnection
.Vous pouvez les configurer en utilisant les attributs ci-dessous:
Si vous souhaitez utiliser
HttpComponentsClientHttpRequestFactory
- il dispose d'un pool de connexion de configuration quiSimpleClientHttpRequestFactory
n'a pas.Un exemple de code pour l'utilisation de
HttpComponentsClientHttpRequestFactory
:requestFactory
dans mon code ci-dessus de la base de manière efficace? Je comprends de votre exemple, comment l'utiliser, mais où dois-je ajustementrequestFactory
dans mon code ci-dessus de la base depuis que je suis à l'aide de DI pour passer le RestTemplate.C'est à vous, mais personnellement, dans nos projets à grande échelle, nous avons utilisé HttpComponentsClientHttpRequestFactory. Mais je suppose qu'il ne devrait pas y avoir de problème avec les deux approches. Avec
HttpComponentsClientHttpRequestFactory
vous pouvez configurer les autres options à l'aide de votre propreHttpClient
. Pour l'utilisation dans votre base de code, il suffit de passer leHttpComponentsClientHttpRequestFactory
instance comme le code que j'ai écrit à la fin de ma réponseBien sûr, je pense à l'aide de
HttpComponentsClientHttpRequestFactory
. Je ne comprends pas de quelle instance que vous souhaitez me passer? Si vous pouvez fournir un exemple de base sur mon code de base alors je comprends mieux ce qu'entendez-vous par là?Veuillez voir le jour réponse, vous devez créer un singleton instance partagée de
RestTemplate
depuis son thread-safe et lourds pour être créé. PS: je n'ai pas testé le code.Merci pour le modifier. Maintenant, je comprends bien ce que tu voulais dire plus tôt. Une dernière question, quelle est la différence entre
READ Timeout
vsConnection Timeout
ici?OriginalL'auteur Õzbek