重试Retryer实例

背景

好的代码应该具备健壮性,比如代码里面调用了一个http请求,如果当时网络抖了下,http就调用失败了,这时候我们往往需要重试,本文我们就来介绍一个功能比较完善的重试组件-Retryer。

实例

我们需要针对接口accountFeignClient.getAccount在出现错误异常时,进行重试

1.添加配置注解@EnableRetry,开启重试功能

在配置类中新增注解@EnableRetry

@EnableRetry
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class})
public class XXXApplication {
...
}

2.封装被调用的接口–需要重试的接口

(1)@Retryable注解定义了重试次数(maxAttempts),间隔时间(value),间隔频率(1.5倍),即每隔1.5秒重试一次

@Service
public class RetryService {

    @Autowired
    private AccountFeignClient accountFeignClient;

    @Retryable(maxAttempts = 3,backoff= @Backoff(value = 1000,multiplier = 1.5))
    public BaseAccountResponse test(){
        System.out.println("retry service test");

        BaseAccountResponse baseAccountResponse = accountFeignClient.getAccount(729060943550464L).getBody();
        return baseAccountResponse;
    }

    @Recover
    public BaseAccountResponse testRetry(){
        BaseAccountResponse baseAccountResponse = new BaseAccountResponse();
        baseAccountResponse.setName("xxx");

        return baseAccountResponse;
    }
 }

3. 调用接口

 @RequestMapping(value = "/test", method = RequestMethod.GET)
    public BaseAccountResponse test(@RequestParam("accountId") String accountId){

        System.out.println("facade test");
        return retryService.test();

    }


参考:
https://www.jianshu.com/p/e51502612673
https://www.baeldung.com/spring-retry


版权声明:本文为BorisCao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。