Java 重试框架 Spring-Retry | 底层 API 与实现原理

发布于:2024-04-11 ⋅ 阅读:(160) ⋅ 点赞:(0)


👀 上节回顾:了解 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(