首頁 > 軟體

spring retry方法呼叫失敗重試機制範例解析

2022-03-05 19:00:37

前言

很多場景會用到重試的機制,比如:rpc服務呼叫失敗重試,檔案上傳oss失敗重試,http介面呼叫失敗重試,支付回撥失敗重試等等,一切因為網路,非邏輯性錯誤等不確定因素引起的失敗都可以加上重試的機制,來增強系統的健壯性,博主也處理過檔案上傳到第三方oss服務失敗增加重試的事例,在這之前不知道spring有個spring-retry專案,所以採用的是限制次數的遞迴呼叫的方式來解決的。

現在我們來看看spring boot專案中怎麼使用spring-retry來處理是失敗重試的問題。

1.匯入依賴

<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註解引數說明
     * 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
@EnableRetry
public class BootRetryApplication {
	public static void main(String[] args) {
		SpringApplication.run(BootRetryApplication.class, args);
	}
}

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

github專案地址:https://github.com/spring-projects/spring-retry

補充,手動宣告式重試:

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方法呼叫失敗重試機制範例解析的詳細內容,更多關於spring retry方法呼叫失敗重試機制的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com