2017-02-08 1 views
0

Je dois appeler le point de terminaison de repos avec la méthode de suppression dans feu et oublier la mode. Je me fiche du résultat. J'essaie d'utiliser AsyncRestTemplate mais le côté serveur n'est pas appelé. Si je passe à RestTemplate tout fonctionne. J'ai remarqué que quand j'attends la réponseAsyncRestTemplate ne pas appeler le point de terminaison DELETE

AsyncRestTemplate template = new AsyncRestTemplate(); 
ListenableFuture<ResponseEntity<String>> exchange = template.exchange(
    url, 
    HttpMethod.DELETE, 
    new HttpEntity<Object>(headers), 
    String.class 
); 
exchange.get(); 

il travaille également. L'appel au point de terminaison PUT fonctionne sans aucun problème (ne pas avoir à appeler la méthode get()). Ensuite, j'ai essayé d'utiliser délai d'attente car je ne veux pas attendre la réponse et utilisé

try { 
     exchange.get(1, TimeUnit.MILLISECONDS); 
    } catch (InterruptedException | ExecutionException | TimeoutException e) { 
     //dirty hack 
    } 

Sur ma machine, si je mets 1 délai d'attente de milliseconde il y a une probabilité de 50% que critère d'évaluation est appelée. À 50 millis il devient trop 100% de chance ...

Des idées quel est le problème?

EDIT:

J'ai aussi essayé

CompletableFuture.runAsync(() -> { 
    try { 
     exchange.get(); 
    } catch (InterruptedException | ExecutionException e) { 
     e.printStackTrace(); 
    } 
}); 

qui a travaillé.

AsyncRestTemplate template = new AsyncRestTemplate(
    new ConcurrentTaskExecutor(Executors.newCachedThreadPool()) 
); 

sans appeler la méthode get() ne fonctionnait pas.

Répondre

0

Si vous définissez un délai d'attente de 1 ms, il est très probable que la requête expire, mais le client met également fin à la connexion pendant la gestion du délai d'expiration. Essayez de l'appeler dans un fil ou créez un ExecutorService et mettez en file d'attente les demandes.

+0

J'ai édité la question, voyez si c'est ce que vous voulez dire? Mon objectif principal est de ne même pas déranger avec le résultat, qui fonctionne lorsque j'appelle le point de terminaison de la méthode PUT. AsyncRestTemplate simple sans appeler get() qui fonctionne. Mais pas avec la méthode de suppression. – kqr