千家信息网

怎么用spring retry方法调用失败重试机制

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,这篇文章主要介绍"怎么用spring retry方法调用失败重试机制"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"怎么用spring retry方法调用失败重
千家信息网最后更新 2024年11月22日怎么用spring retry方法调用失败重试机制

这篇文章主要介绍"怎么用spring retry方法调用失败重试机制"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"怎么用spring retry方法调用失败重试机制"文章能帮助大家解决问题。

前言

很多场景会用到重试的机制,比如:rpc服务调用失败重试,文件上传oss失败重试,http接口调用失败重试,支付回调失败重试等等,一切因为网络,非逻辑性错误等不确定因素引起的失败都可以加上重试的机制,来增强系统的健壮性,博主也处理过文件上传到第三方oss服务失败增加重试的事例,在这之前不知道spring有个spring-retry项目,所以采用的是限制次数的递归调用的方式来解决的。

现在我们来看看spring boot项目中怎么使用spring-retry来处理是失败重试的问题。

1.导入依赖

                        org.springframework.boot                        spring-boot-starter-aop                                                        org.springframework.retry                        spring-retry

ps:不要遗漏spring-boot-starter-aop包

2.注解的使用

/**     * @Retryable注解参数说明     * maxAttempts 重试的次数     * value 指定异常重试     * exclude 排除某个异常不重试     *      * @Backoff注解参数说明     * backoff 重试的间隔时间     */    @Retryable(maxAttempts=9,exclude = ArrayIndexOutOfBoundsException.class,value=Exception.class,backoff=@Backoff(delay = 1000))    public String getResult(String name){        System.out.println("尝试调用第"+i+++"次");        name= name.split(",")[1111];//异常测试        if(i!=8){            name= name.split(",")[1111];//异常测试        }        return name+":你好!";    }

3.开启重试

@SpringBootApplication@EnableRetrypublic class BootRetryApplication {        public static void main(String[] args) {                SpringApplication.run(BootRetryApplication.class, args);        }}

ps:别忘了@EnableRetry注解开启重试

补充,手动声明式重试:

public static void main(String[] args) {        ProxyFactory factory = new ProxyFactory(HelloService.class.getClassLoader());        factory.setInterfaces(HelloService.class);        factory.setTarget(new HelloService() {            @Override            public String say() {                System.err.println("hello");                if(1==1) throw new SecurityException();                return "a";            }        });        HelloService service = (HelloService) factory.getProxy();        JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();        pointcut.setPatterns(".*say.*");        RetryOperationsInterceptor interceptor = new RetryOperationsInterceptor();        ((Advised) service).addAdvisor(new DefaultPointcutAdvisor(pointcut, interceptor));        service.say();    }

关于"怎么用spring retry方法调用失败重试机制"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0