2017-02-19 1 views
1

Dans Jaxrs (WebClient par exemple), nous pouvons définir un timeout de connexion et un timeout de lecture.Jaxrs possibilité de définir un délai d'attente global (se connecter + lire)

ClientConfiguration c = WebClient.getConfig(client); 
    HTTPConduit http = c.getHttpConduit(); 
    HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); 
    httpClientPolicy.setConnectionTimeout(timeout); 
    httpClientPolicy.setReceiveTimeout(timeout); 
    httpClientPolicy.setAllowChunking(false); 
    http.setClient(httpClientPolicy); 

Je voudrais définir un délai qui inclut à la fois, je ne me soucie pas vraiment combien de temps est consacré à la connexion ou à recevoir, mon exigence est d'obtenir une réponse en quelques secondes X ou tout simplement jeter la recherche .

Répondre

1

CXF n'a aucun moyen de définir un délai d'attente maximal pour une demande prenant en compte les durées de connexion et de réception. Le délai d'attente maximal pour une demande sera:

maximum_timeout = connection_timeout + receive_timeout 

Voir cette question similaire pour Apache HTTP client. La solution de contournement pourrait être de définir une minuterie dans un thread séparé pour annuler la connexion lorsque le délai maximal souhaité expire

+0

Peut-être via un intercepteur ?, mais je ne sais pas si c'est faisable – cocorossello

+1

J'ai passé en revue 'WebClient' javadoc et il Il n'est pas possible d'annuler une requête en cours, il n'est donc pas possible d'utiliser un intercepteur car il sera exécuté dans le même thread que la requête principale (et le thread principal est bloqué jusqu'à réponse/timeout). Vous devez créer un thread de surveillance supplémentaire avec un délai d'expiration et travailler de manière asynchrone, dans les deux cas: timeout ou réponse correcte. Considérez si cela vaut la peine ... – pedrofb