SpringBoot技术实践-SpringRetry重试框架

本文介绍了SpringBoot中SpringRetry的使用,包括环境搭建、RetryTemplate的详细操作,如RetryListener、回退策略(FixedBackOffPolicy和ExponentialBackOffPolicy)、重试策略和RetryCallback。还讲解了@EnableRetry和@Retryable注解的使用,如何配置重试次数、异常类型、回退延迟和重试策略。
摘要由CSDN通过智能技术生成

一、环境搭建

  1. 加入SpringRetry依赖,SpringRetry使用AOP实现,所以也需要加入AOP包
<!-- SpringRetry -->
<dependency>
	  <groupId>org.springframework.retry</groupId>
	  <artifactId>spring-retry</artifactId>
</dependency>
<dependency>
	  <groupId>org.springframework</groupId>
	  <artifactId>spring-aspects</artifactId>
</dependency>

二、RetryTemplate

2.1 RetryTemplate

  1. RetryTemplate封装了Retry基本操作
    • org.springframework.retry.support.RetryTemplate
  2. RetryTemplate中可以指定监听、回退策略、重试策略等
  3. 只需要正常new RetryTemplate()即可使用

2.2 RetryListener

  1. RetryListener指定了当执行过程中出现错误时的回调
    • org.springframework.retry.RetryListener
package org.springframework.retry;

public interface RetryListener {
   

	/**
	 * 任务开始执行时调用,只调用一次
	 */
	<T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback);

	/**
	 * 任务执行结束时(包含重试)调用,只调用一次
	 */
	<T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable);

	/**
	 * 出现错误时回调
	 */
	<T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable);
}
  1. 配置之后在RetryTemplate中指定

2.3 回退策略

2.3.1 FixedBackOffPolicy

  1. 当出现错误时延迟多少时间继续调用
FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
fixedBackOffPolicy.setBackOffPeriod(1000L);
retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
  1. 配置之后在RetryTemplate中指定

2.3.2 ExponentialBackOffPolicy

  1. 当出现错误时第一次按照指定延迟时间延迟后按照指数进行延迟
// 指数回退(秒),第一次回退1s,第二次回退2s,第三次4秒,第四次8秒
ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();
exponentialBackOffPolicy.setInitialInterval(1000L);
exponentialBackOffPolicy.setMultiplier(2);
retryTemplate.setBackOffPolicy(exponentialBackOffPolicy);
  1. 配置之后在RetryTemplate中指定

2.4 重试策略

  1. 重试策略主要指定出现错误时重试次数
// 重试策略
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(5);
retryTemplate.setRetryPolicy(retryPolicy);
  1. 配置之后在RetryTemplate中指定

2.5 RetryCallback

  1. RetryCallback为retryTemplate.execute时执行的回调
    • public final <T, E extends Throwable> T execute(RetryCallback<T, E> retryCallback) throws E

image.png

2.6 核心使用

  1. 可以使用RetryTemplate完成简单使用
  2. 配置retryTemplate
    • 指定回退策略为ExponentialBackOffPolicy
    • 指定重试策略为SimpleRetryPolicy
    • 指定监听器RetryListener
import com.codecoord.util.PrintUtil;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.retry.RetryCallback;
import org.springframework.retry.RetryContext;
import org.springframework.retry.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值