2017-02-08 5 views
0

私はのdeleteメソッドで休憩のエンドポイントを呼び出す必要があります。ファッション。私は結果を気にしない。 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ミリ秒で100%チャンスが得られます...

何か問題がありますか?

EDIT:

私も働いている

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

関連する問題