2017-02-26 16 views
0

私は、UPDATE/DELETE Rest Endpointを呼び出す必要があるユースケースを持っています。 エンティティのロックが解除されるまでしばらくお待ちください。そうでなければ、強制的にロック解除エンドポイントを呼び出し、もう一度私の元のリクエストを呼び出します。これは何とかフェイルセーフで可能ですか?私がこれまで試したどのようなFailsafe - 再試行してもう一度試してみると、何らかのアクションを実行します。

lockRetryPolicy = new RetryPolicy() 
      .retryOn(LockException.class) 
      .withBackoff(1, 8, TimeUnit.MINUTES) 
      .withMaxDuration(30, TimeUnit.MINUTES); 

private <R, T> R lockRetryExecution(String elementUrl, Callable<R> task) { 
    return Failsafe.with(lockRetryPolicy) 
      .onRetriesExceeded((o, throwable) -> { 
       forceUnlock(elementUrl); 
       task.call(); 
      }) 
      .withFallback((o, throwable) -> o) 
      .get(task); 
} 

しかし、このアプローチでは、私は最後の「再試行」を自分で行う必要があると、このアクションの結果を得ることができません。

答えて

0

このように見えます。

private <R, T> R lockRetryExecution(String elementUrl, Callable<R> task) { 
    return Failsafe.with(lockRetryPolicy) 
     .onRetriesExceeded((o, throwable) -> forceUnlock(elementUrl)) 
     .withFallback(task) 
     .get(task); 
} 
関連する問題