SpringBoot集成接口重试Retry
前言
在实际的应用中,我们经常需要调用第三方API来获取数据或执行某些操作。然而,由于网络不稳定、第三方服务异常等原因,API调用可能会失败。为了提高系统的稳定性和可靠性,我们通常会考虑实现重试机制。
集成
1、引入pom坐标
<dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId></dependency>
同时需要aop的依赖包:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>
启动类加注解:
@EnableRetry
2、代码示例
2.1配置重试策略
@Override@Retryable(value = {RestClientException.class},maxAttempts = 3,backoff = @Backoff(delay = 1000,multiplier = 2))public String callThirdPartyApi() {//调用第三方API接口逻辑return null;}
@Retryable注解标记了callThirdPartyApi
方法,指定了当发生RestClientException
异常时进行重试。
maxAttempts
指定最大重试次数。
backoff指定了重试间隔的初始延迟和延迟倍数。
2.2降级处理
@Override@Retryable(value = {RestClientException.class},maxAttempts = 3,backoff = @Backoff(delay = 1000,multiplier = 2))public String callThirdPartyApi() {//调用第三方API接口逻辑return null;}@Recoverpublic String fallback(){//降级处理逻辑return null;}
@Recover注解标记了fallback方法,当callThirdPartyApi方法的重试次数达到上限时,将执行fallback方法中的降级逻辑。
2.3异步方法的重试及降级
@Async@Retryable(value = {RestClientException.class},maxAttempts = 3,backoff = @Backoff(delay = 1000,multiplier = 2))public CompletableFuture<String> callAsyncThirdPartyApi() {//调用第三方API接口逻辑}@Recoverpublic CompletableFuture<String> fallback() {// 异步降级处理逻辑}
2.4异常分类与重试
@Retryable(value = { RestClientException.class, TimeoutException.class },maxAttempts = 3,backoff = @Backoff(delay = 1000, multiplier = 2))public String callThirdPartyApi() {// 调用第三方API的逻辑// ...}
callThirdPartyApi方法会在发生RestClientException
或TimeoutException
异常时进行重试。
@Retryable(value = { RestClientException.class },maxAttempts = 3,backoff = @Backoff(delay = 1000, multiplier = 2),exclude = { TimeoutException.class })public String callThirdPartyApi() {// 调用第三方API的逻辑// ...}
callThirdPartyApi方法会在发生RestClientException
异常时进行重试,但排除了TimeoutException
异常。