@Retryable 异常重试注解
2022-10-24 本文已影响0人
_浅墨_
/***
* 发送闪信
* 发送失败重试10次,间隔3,6,12,24,48,96,192,384,768,1536秒之后
* 如果BackOff时间设置比较长,最好起异步线程重试(也可以加@Async注解)。
* @return java.lang.String
* value: 指定重试的异常,只有该异常才会重试,如果有多个异常重试,支持:value={RetryException.class,RunTimeException.class}
* maxAttempts: 重试次数,默认为3次
* @Backoff 标签
* delay:延迟时间(单位毫秒,默认为0毫秒)
* multiplier: 延迟间隔倍率,比如定义延迟为1秒,延迟倍率为2,则第一次重试间隔为1秒,第二次2秒,第三次4秒
* maxDelay: 最大间隔时间,最大延迟的时间,不设置默认为30秒钟。
**/
@Async
@Retryable(value = RetryException.class, maxAttemptsExpression = "${mufeng-api.retry.maxAttempts:10}", backoff = @Backoff(delay = 3000L, maxDelay=1600000,multiplier = 2))
public void addRemarkToRedmine(String redmineKey,Integer redmineId,String remark){
log.info("async add remark to redmine: apiKey= {} redmineId= {} remark= {}",redmineKey,redmineId,remark);
if (StringUtils.isEmpty(redmineKey) || redmineId ==null){
return;
}
try {
log.info("当前线程id= {} name= {}",Thread.currentThread().getId(),Thread.currentThread().getName());
redmineCommonFunction.addRemark(redmineKey, redmineId, remark);
} catch (RedmineException e) {
log.error("redmineCommonFunction.addRemark error: ",e);
throw new RetryException("上传文件备注redmine失败...");
}
}
记得方法中 一定要抛出异常,注解才生效。
throw new RetryException("上传文件备注redmine失败...");