文章目录
👀 上节回顾:了解 listener 和自定义注解等进阶用法。
👉 本节目标:了解 Spring-Retry 底层 API 及实现原理。
RetryOperations 与 RetryTemplate
RetryOperations 接口,定义了一些重试行为方法。RetryTemplate 是其实现类。
其关系和 RestOperations 与 RestTemplate 的关系一毛一样。【接口与实现】
public interface RetryOperations {
// 无状态重试
<T, E extends Throwable> T execute(RetryCallback<T, E> retryCallback) throws E;
<T, E extends Throwable> T execute(RetryCallback<T, E> retryCallback, RecoveryCallback<T> recoveryCallback)
throws E;
// 有状态重试
<T, E extends Throwable> T execute(RetryCallback<T, E> retryCallback, RetryState retryState)
throws E, ExhaustedRetryException;
<T, E extends Throwable> T execute(RetryCallback<T, E> retryCallback, RecoveryCallback<T> recoveryCallback,
RetryState retryState) throws E;
}
RetryCallback - 重试回调方法
重试回调接口,在 T doWithRetry(RetryContext context)
方法中编写业务逻辑。
public interface RetryCallback<T, E extends Throwable> {
T doWithRetry(RetryContext context) throws E;
}
RecoveryCallback - 恢复回调方法
针对有状态重试,当所有重试耗尽后,RetryOperations 会把控制权交给 RecoveryCallback 来处理:
public interface RecoveryCallback<T> {
T recover(