需求
由于之前生产系统多服务不定时的重启(服务都是集群,所有生产环境的业务还能正常进行),导致系统中的业务状态同步时出现异常,
各个服务的业务状态不一致,需要后续补偿修复业务状态,所以使用spring-retry对报错接口进行重试(不要说这个让服务器不重启就解决,
服务器的操作权限在运维那边,处理了一周也没有解决),请求报错之后自动重试请求。
依赖
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>1.3.1</version>
</dependency>
org.springframework.retry.annotation.Retryable注解详解
public @interface Retryable {
String recover() default "";
String interceptor() default "";
Class<? extends Throwable>[] value() default {};
Class<? extends Throwable>[] include() default {};
Class<? extends Throwable>[] exclude() default {};
String label() default "";
boolean stateful() default false;
int maxAttempts() default 3;
String maxAttemptsExpression() default "";
Backoff backoff() default @Backoff();
String exceptionExpression() default "";
String[] listeners() default {};
}
方法中使用
@Retryable(value = TokenFailureException.class,maxAttempts = 5,backoff = @Backoff(delay = 500L, multiplier = 1))
publicBspcCommonResp importAccount(PsbcImportReq req){
BspcCommonResp resp = JSONObject.parseObject(sendPostRequest(PsbcUrlConstant.BSPC_IMPORT,req), BspcCommonResp.class);
if(resp.isTokenException()){
refreshToken();
throw new TokenFailureException("token失效");
}
return resp;
}