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
異常。