2017-02-26 95 views
0

我有一個用例,我需要調用UPDATE/DELETE Rest端點,它可能會返回關於實體被鎖定以進行編輯的異常。 我想等待一段時間讓實體解鎖,否則請強制解鎖端點,並再次調用我的原始請求。不知怎的,這是可能的嗎?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); 
} 
相關問題