溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用spring?retry方法調(diào)用失敗重試機(jī)制

發(fā)布時(shí)間:2022-03-07 09:16:33 來源:億速云 閱讀:142 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“怎么用spring retry方法調(diào)用失敗重試機(jī)制”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“怎么用spring retry方法調(diào)用失敗重試機(jī)制”文章能幫助大家解決問題。

前言

很多場(chǎng)景會(huì)用到重試的機(jī)制,比如:rpc服務(wù)調(diào)用失敗重試,文件上傳oss失敗重試,http接口調(diào)用失敗重試,支付回調(diào)失敗重試等等,一切因?yàn)榫W(wǎng)絡(luò),非邏輯性錯(cuò)誤等不確定因素引起的失敗都可以加上重試的機(jī)制,來增強(qiáng)系統(tǒng)的健壯性,博主也處理過文件上傳到第三方oss服務(wù)失敗增加重試的事例,在這之前不知道spring有個(gè)spring-retry項(xiàng)目,所以采用的是限制次數(shù)的遞歸調(diào)用的方式來解決的。

現(xiàn)在我們來看看spring boot項(xiàng)目中怎么使用spring-retry來處理是失敗重試的問題。

1.導(dǎo)入依賴

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.retry</groupId>
			<artifactId>spring-retry</artifactId>
</dependency>

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

2.注解的使用

/**
     * @Retryable注解參數(shù)說明
     * maxAttempts 重試的次數(shù)
     * value 指定異常重試
     * exclude 排除某個(gè)異常不重試
     * 
     * @Backoff注解參數(shù)說明
     * backoff 重試的間隔時(shí)間
     */
    @Retryable(maxAttempts=9,exclude = ArrayIndexOutOfBoundsException.class,value=Exception.class,backoff=@Backoff(delay = 1000))
    public String getResult(String name){
        System.out.println("嘗試調(diào)用第"+i+++"次");
        name= name.split(",")[1111];//異常測(cè)試
        if(i!=8){
            name= name.split(",")[1111];//異常測(cè)試
        }
        return name+":你好!";
    }

3.開啟重試

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

ps:別忘了@EnableRetry注解開啟重試

補(bǔ)充,手動(dòng)聲明式重試:

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();
    }

關(guān)于“怎么用spring retry方法調(diào)用失敗重試機(jī)制”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI