2017-02-26 64 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); 
} 
相关问题