糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > java调用接口失败后重试

java调用接口失败后重试

时间:2021-09-16 05:40:01

相关推荐

java调用接口失败后重试

项目在调用远程接口的时候会因为很多原因导致失败,所以接口调用失败后需要重试,重试策略用的是spring-retry,是spring提供的一个基于spring的重试框架,使用非常简单,在方法上加上注解就行,对代码的侵略小。

更多方法看官网:/spring-projects/spring-retry

首先在springboot项目中引入maven依赖,方法重试是基于aop的,这个也要加上。

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

在启动类上加上注解@EnableRetry(proxyTargetClass = true)

调用需要重试的方法单独写一个类,和被调用的类要分开,不然会导致方法重试不成功,在需要重试的方法上加上注解,@Retryable(value = ApiRuntimeException.class, maxAttempts = 5, backoff = @Backoff(delay = 4000L, multiplier = 2))。

ApiRuntimeException.class 表示抛出的异常类。

maxAttempts 方法最多重试次数。

delay 重试间隔时间。

multiplier 距离上一次重试的时间倍数。

这几个比较常用,更多参数可以参考官网。

@Recover注解是重试结束时调用的方法,返回类型和抛出的异常必须与@Retryable方法匹配。

@Retryable(value = ApiRuntimeException.class, maxAttempts = 5, backoff = @Backoff(delay = 4000L, multiplier = 2))public void syncJobTask(JSONObject object) throws IOException {MediaType mediaType = MediaType.parse("application/json; charset=utf-8");Request request = new Request.Builder().url(syncJobPost).post(RequestBody.create(mediaType, object.toString())).build();Response response = client.newCall(request).execute();JSONObject jsonObject = JSONObject.parseObject(response.body().string());log.info("调用同步作业方法返回值。。。。"+jsonObject);Boolean success = Boolean.valueOf(jsonObject.get("success").toString());PublishJobTaskOperate jobTaskOperate = new PublishJobTaskOperate();jobTaskOperate.setRequestInterface(Consts.SYNC_JOB_POST);jobTaskOperate.setIsSuccess(success);jobTaskOperate.setCode(String.valueOf(jsonObject.get("code")));publishJobTaskOperateDao.save(jobTaskOperate);if(!success){throw new ApiRuntimeException(Consts.ERROR_SSH_PROXY_CONN,"调用同步作业方法失败!");}}@Recoverpublic void doRecover() throws ApiRuntimeException {log.info("全部重试失败,执行doRecover");}

如果觉得《java调用接口失败后重试》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。