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