RetryTemplate
提供给外部调用的重试执行器
class RetryTemplate{
BackOffPolicy backOffPolicy
RetryPolicy retryPolicy
public final <T, E extends Throwable> T execute(RetryCallback<T, E> retryCallback,
RecoveryCallback<T> recoveryCallback) throws E {
return doExecute(retryCallback, recoveryCallback, null);
}
}
执行流程:
RetryTemplate retryTemplate = new RetryTemplate();
//指数退避策略
ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy();
backOffPolicy.setInitialInterval(3000);
backOffPolicy.setMultiplier(2);
backOffPolicy.setMaxInterval(15000);
retryTemplate.setBackOffPolicy(backOffPolicy);
CircuitBreakerRetryPolicy retryPolicy = new CircuitBreakerRetryPolicy();
retryPolicy.setOpenTimeout(3000);
retryPolicy.setResetTimeout(6000);
retryTemplate.setRetryPolicy(retryPolicy);
String result = retryTemplate.execute(context -> {
int i = new Random().nextInt(10);
if (i < 7) {
throw new RuntimeException("fail");
}
return "success" + i;
}, context -> {
return "兜底";
});
System.out.println(result);