如何在Spring Boot中优雅地重试调用第三方API?
import org.springframework.retry.annotation.Retryable;
import org.springframework.retry.annotation.Backoff;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
@Service
public class ApiService {
private final RestTemplate restTemplate;
public ApiService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@Retryable(
value = RestClientException.class,
maxAttemptsExpression = "5",
backoff = @Backoff(delayExpression = "1000")
)
public String callThirdPartyApi(String url) {
return restTemplate.getForObject(url, String.class);
}
@Recover
public String recover(RestClientException e, String url) {
// 记录日志,通知管理员或采取其他措施
log.error("调用第三方API失败,URL: {}", url, e);
// 返回默认值或从备用来源获取数据
return "{\"error\": \"API call failed\"}";
}
}
这段代码使用了Spring的@Retryable
注解来指定方法callThirdPartyApi
在遇到RestClientException
异常时进行重试。maxAttemptsExpression
指定了最大重试次数,backoff
注解的delayExpression
设置了重试间的延迟。@Recover
注解的方法将在重试失败后被调用,可以用来记录日志、通知管理员或者采取其他措施。
评论已关闭