SpringBoot集成接口重试Retry

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方法会在发生RestClientExceptionTimeoutException异常时进行重试。

java 复制代码
@Retryable(
        value = { RestClientException.class },
        maxAttempts = 3,
        backoff = @Backoff(delay = 1000, multiplier = 2),
        exclude = { TimeoutException.class }
    )
    public String callThirdPartyApi() {
        // 调用第三方API的逻辑
        // ...
    }

callThirdPartyApi方法会在发生RestClientException异常时进行重试,但排除了TimeoutException异常。

相关推荐
遨翔在知识的海洋里6 分钟前
nestjs(1)-模块的相互调用
后端
Profile排查笔记7 分钟前
指纹浏览器推荐:用一套验收清单筛选 Profile、代理与自动化能力
前端·人工智能·后端·自动化
jsl_jsl_jsl8 分钟前
JUC速记
后端
摇滚侠12 分钟前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 31
android·spring boot·笔记
站大爷IP13 分钟前
Python的pip依赖把我折腾惨了,原来requirements.txt和poetry能打出火星撞地球
后端
torpidcat17 分钟前
ruoyi-vue-pro 若依芋道 java springboot +mybatis 生日查询相关
java·vue.js·spring boot
狗哥哥27 分钟前
用“十步学习法”带你学会事件驱动架构
后端
AC赳赳老秦31 分钟前
文旅市场公开数据分析:基于 OpenClaw 采集景区客流与门票公示数据,生成区域文旅热度监测报告
java·c语言·python·php·symfony·deepseek·openclaw
挽安62140 分钟前
Spring Boot自动配置原理:从@EnableAutoConfiguration源码一步步看懂
后端
深入云栈1 小时前
Netty 4.2.x 源码深度解析 (十二):NIO传输——NioSocketChannel与NioServerSocketChannel的IO读写实现
后端