2017-02-08 6 views
0

나는 에 삭제 방법으로 나머지 끝점을 호출해야하며 패션을 잊어 버린다. 나는 결과에 관심이 없다. AsyncRestTemplate을 사용하려고하는데 서버 측이 호출되지 않습니다. RestTemplate으로 전환하면 모든 것이 작동합니다. 은 그럼 내가 응답AsyncRestTemplate가 끝점을 DELETE하지 않는다.

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

을 기다릴 때 그것은 또한 작동하고 있음을 발견했습니다. PUT 끝점 호출은 아무 문제없이 작동합니다 (get() 메서드를 호출 할 필요가 없음). 그런 다음, 나는 응답을 기다리고 싶지 않기 때문에 시간 제한을 사용하려고 내가 엔드 포인트가 호출되는 것을 50 %의 확률이 1 밀리 초 시간 제한을 설정하면 내 컴퓨터에

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

을 사용했다. 50 millis에서 너무 100 % 기회를 얻습니다 ...

어떤 아이디어가 문제입니까?

편집 :

는 또한

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

을 시도했다.

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

get() 메서드를 호출하지 않아도 작동하지 않았습니다.

답변

0

시간 제한을 1ms로 설정하면 실제로 요청이 시간 초과 될 가능성이 높지만 클라이언트는 제한 시간을 처리하는 동안 연결을 종료합니다.

스레드에서 호출하거나 ExecutorService을 작성하여 요청을 대기열에 넣으십시오.

+0

질문을 편집했습니다. 이것이 무슨 뜻인지 아시나요? 내 주요 목표는 PUT 메서드 끝점을 호출 할 때 작동하는 결과를 신경 쓰지 않는 것입니다. 작동하는 get()을 호출하지 않고 간단한 AsyncRestTemplate. 하지만 삭제 방법이 아닙니다. – kqr