spring-retry一些简单的用法

1.什么是spring-retry

有些场景需要我们对一些异常情况下面的任务进行重试,比如:调用远程的RPC服务,可能由于网络抖动出现第一次调用失败,尝试几次就可以恢复正常。

spring-retry是spring提供的一个基于spring的重试框架,非常好用。

官网地址: 官网地址

2.添加依赖

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

3.启动类增加@EnableRetry注解

@EnableDiscoveryClient
@SpringBootApplication
@EnableDistributedTransaction
@EnableAuthenticationClient
@MapperScan("com.***.mapper")
@EnableFeignClients({"com.***.api"})
@EnableScheduling
@EnableRetry //接口重试框架
public class AppletCenterApplication {

    public static void main(String[] args) {
        SpringApplication.run(AppletCenterApplication.class, args);
    }

}

4.重试的接口上添加@Retryable注解

添加重试注解,当有异常时触发重试机制,设置重试5次,默认是3.延时2000ms再次执行,每次延时是上次延时的1.5倍.当返回结果不符合要求时,主动报错触发重试.

 /**
     * @description 获取录音文件下载地址
     *  重试机制 5次  延时2000ms再次执行,每次延时是上次延时的1.5倍
     * @params [recordDomain, fileName]
     * @return java.lang.String
     * @author xiaoyc
     * @date 2021/5/8 16:41
     **/
    @Retryable(value = {BusinessException.class}, maxAttempts = 5,
            backoff = @Backoff(delay = 2000, multiplier = 1.5))
    public String axbGetRecordDownloadLink(String recordDomain, String fileName) {
        log.info("*********获取录音文件下载地址开始*********{},{}" + recordDomain + fileName);
        if (StringUtils.isBlank(recordDomain) || StringUtils.isBlank(fileName)) {
            return "axbGetRecordDownloadLink set params error";
        }
        // 必填,AXB模式获取录音文件下载地址接口访问URI
        String url = "/rest/provision/voice/record/v1.0";
        String realUrl = buildOmpUrl(url);
        // 申明对象
        Map<String, Object> map = new HashMap<>();
        // 录音文件存储的服务器域名
        map.put("recordDomain", recordDomain);
        // 录音文件名
        map.put("fileName", fileName);
        String result;
        try {
            result = HttpUtil.sendGet(OMPOMPAPPKEY, OMPAPPSECRET, realUrl, HttpUtil.map2UrlEncodeString(map));
            HuaWeiSecretUtil.result(result);
        } catch (Exception e) {
            log.error("获取华为通话加密录音文件地址错误" + e.getMessage());
            throw new BusinessException(e.getMessage());
        }
        log.info("*********获取录音文件下载地址结束*********{}" + result);
        return result;
    }

5.增加重试依然失败后回调的方法上加@Recover注解,如果不写,将正常的抛出异常

  • 异常类型需要与Recover方法参数类型保持一致
  • recover方法返回值需要与重试方法返回值保证一致
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值