Java Client HTTP de la Requête avec délai défini
Je voudrais faire de BITS (Construit dans les tests) à un certain nombre de serveur dans mon nuage. J'ai besoin de l'échec de la demande sur le délai d'attente important.
Comment dois-je faire avec java?
Essayer quelque chose comme le ci-dessous ne semble pas fonctionner.
public class TestNodeAliveness {
public static NodeStatus nodeBIT(String elasticIP) throws ClientProtocolException, IOException {
HttpClient client = new DefaultHttpClient();
client.getParams().setIntParameter("http.connection.timeout", 1);
HttpUriRequest request = new HttpGet("http://192.168.20.43");
HttpResponse response = client.execute(request);
System.out.println(response.toString());
return null;
}
public static void main(String[] args) throws ClientProtocolException, IOException {
nodeBIT("");
}
}
-- EDIT: Clarifier ce que la bibliothèque est utilisée --
Je suis en utilisant httpclient de apache, voici les pom.xml section
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.0.1</version>
<type>jar</type>
</dependency>
- Ce que la bibliothèque êtes-vous à l'aide de toutes les fonctionnalités HTTP?
- Merci pour le commentaire. J'ai mis à jour mon post.
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez un Client Http de la version 4.3 et au-dessus, vous devriez être en utilisant ceci:
SocketTimeout
. En outre, le fait "par défaut" signifie, c'est par défaut pour tous lesHttpClient
que leHttpClientBuilder
de créer() donnera par le biais debuild()
méthode? Ou tout simplement ceux qui passent à traverssetDefaultRequestConfig(requestConfig)
?HttpParams est obsolète dans la nouvelle Apache HTTPClient de la bibliothèque. En utilisant le code fourni par Laz conduit à la dépréciation des avertissements.
Je suggère l'utilisation de RequestConfig plutôt sur votre HttpGet ou HttpPost exemple:
RequestConfig
dans tous lesHttpPost
plutôt que de le définir comme valeur par défaut dans leHttpClient
?On dirait que vous êtes à l'aide de la HttpClient API, qui je n'en sais rien, mais vous pourriez écrire quelque chose de semblable à ce à l'aide de base Java.
J'ai trouvé que la mise à l'heure des réglages sur
HttpConnectionParams
etHttpConnectionManager
ne résout pas notre cas. Nous nous sommes limités à l'utilisation deorg.apache.commons.httpclient
la version 3.0.1.J'ai fini à l'aide d'un
java.util.concurrent.ExecutorService
pour surveiller laHttpClient.executeMethod()
appel.Voici un petit, autonome exemple
Ladite méthode avec la plus haute du Laz est obsolète depuis la version 4.3 et ultérieures. Par conséquent, il serait préférable de l'utilisateur de la Demande Objet de Config et ensuite construire le Client HTTP
La PoolingHttpClientConnectionManager est à l'utilisateur de définir le max par défaut du nombre de connexions et le nombre maximum de conncetions par la route. J'ai mis comme 306 et 108. Les valeurs par défaut ne sera pas suffisante pour la plupart des cas.
Pour le paramètre de Délai d'attente:
J'ai utilisé le RequestConfig objet. Vous pouvez également définir la propriété de la Demande de Connexion Timeout pour le paramètre de délai d'attente pour une connexion du gestionnaire de Connexion.
Cela a déjà été mentionné dans un commentaire de benvoliot ci-dessus. Mais, je pense que ça vaut un haut niveau de poste, car il avait de moi de me gratter la tête. Je poste dans ce cas, il aide à quelqu'un d'autre.
J'ai écrit un test simple client et le
CoreConnectionPNames.CONNECTION_TIMEOUT
délai d'attente fonctionne parfaitement dans ce cas. La demande sera annulée si le serveur ne répond pas.À l'intérieur du code serveur, j'étais effectivement en train de tester, cependant, le code identique n'arrive jamais à expiration.
De le changer de temps sur la prise de connexion de l'activité (
CoreConnectionPNames.SO_TIMEOUT
) plutôt que la connexion HTTP (CoreConnectionPNames.CONNECTION_TIMEOUT
) résolu le problème pour moi.Également lire les Apache docs attentivement: http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/params/CoreConnectionPNames.html#CONNECTION_TIMEOUT
Remarque les bits qui dit
J'espère que sauve quelqu'un d'autre tout le casse-tête que j'ai vécu. Qui m'apprendra à ne pas lire la documentation soigneusement!
Op a dit plus tard qu'ils ont été à l'aide d'Apache Commons HttpClient 3.0.1
HttpConnectionParams.setSoTimeout(params, 10*60*1000);//for 10 mins i have set the timeout
Vous pouvez ainsi définir vos impératifs de temps.