我有一个用例,我需要在其中调用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);
}
但是,使用这种方法,我必须自己进行最后的"重试",并且无法获得此操作的结果。
看起来很有效。
private <R, T> R lockRetryExecution(String elementUrl, Callable<R> task) {
return Failsafe.with(lockRetryPolicy)
.onRetriesExceeded((o, throwable) -> forceUnlock(elementUrl))
.withFallback(task)
.get(task);
}