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

更多方法看官网: https://github.com/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调用接口失败后重试相关推荐

  1. java调用接口失败重调_接口调用失败的退避策略

    退避策略简介 在开发过程中我们经常会遇到调用接口失败的情况.遇到这种情况,我们有时候需要重试机制,常用的重试(退避)策略有: 固定的时间间隔重试一次,最多重试N次:比如我现在一个接口调用失败了,不是立 ...

  2. java调用接口失败重试,httpclient接口测试中重试控制器设置

    本人在使用httpclient做接口测试的过程中,之前并没有考虑到请求失败自动重试的情况,但有时又需要在发生某些错误的时候重试,比如超时,比如响应频繁被拒绝等等,在看过官方的示例后,自己写了一个自动重 ...

  3. java调用接口失败重调_Java调用WebService接口的常见错误

    1.如果出现这个错误:java.lang.NoClassDefFoundError: javax/xml/soap/SOAPException,原因是没有导入 axis2-saaj.jar包 2.如果 ...

  4. java调用接口失败重调_java 接口调用问题

    使用fastjson,jackjson等工具也是可能很简单解决这问题 下面是我的做法,如果大家觉得不好请评论一下. 建一个Batch类,里面有字段batchNo,List detail; public ...

  5. 新增操作 失败后重试_可重试的操作

    新增操作 失败后重试 在我从事的每个项目中,始终需要某些功能:重试操作. 通常,这是关于通过网络的呼叫,该呼叫可能一次失败,但随后会成功. 它可能涉及许多其他内容,主要包括与另一个系统的通信(无论是否 ...

  6. ictclas包 java_ICTCLAS分词系统Java调用接口在Eclipse中的安装

    ICTCLAS分词系统Java调用接口在Eclipse中的安装 实验环境:JDK1.5.Eclipse3.1.XP操作系统 分词系统Java接口解压包:d:\fenci(http://www.nlp. ...

  7. java调用接口实现的方法_java调用接口的实现方法

    java调用接口的实现方法 发布时间:2020-06-29 11:08:46 来源:亿速云 阅读:78 作者:Leah 本篇文章给大家分享的是有关java调用接口的实现方法,小编觉得挺实用的,因此分享 ...

  8. 安装蓝鲸智云社区版5.0.4监控页面调用接口失败

    环境描述:全新安装蓝鲸智云社区版5.0.4,不存在升级 安装配置:     192.168.0.162 kafka,zk,es,appt,fta,consul,bkdata     192.168.0 ...

  9. axios某一接口失败后不调用_axios 源码系列之如何取消请求

    我们在前后端交互的过程中,通常是通过请求接口来实现的,而一个页面中的交互又非常复杂,例如需要多次频繁请求同一个接口,或者在接口还没返回时就要切换路由等.这些都需要对接口请求的时机或者请求接口之后进行处 ...

最新文章

  1. pandas使用groupby函数和count函数返回的是分组下每一列的统计值(不统计NaN缺失值)、如果多于一列返回dataframe、size函数返回分组下的行数结果为Series(缺失值不敏感)
  2. 网络工程:2.1.ARP协议与PC间通信
  3. P1993 小 K 的农场
  4. Linux 驱动开发之内核模块开发 (三)—— 模块传参
  5. 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (三)实现数据库接口层和业务逻辑层(转)...
  6. Android内核开发:如何统计系统的启动时间
  7. Tuxera NTFS有什么优点可以让我们使用?
  8. ARC 环境下 dealloc 的使用误区
  9. opencv 访问图像的像素方法和算法用时的计算
  10. 爬虫爬评书吧_历史故事爬虫
  11. App 启动时如何知道 CloudKit 的 iCloud 数据同步操作已经结束了?
  12. 【安装windows10 RTX3090 tensorflow的开发环境】
  13. 区块链学习系列:对称与非对称加密区别?
  14. 缓慢的HTTP拒绝服务攻击漏洞
  15. git 公钥配置时问题解决记录
  16. 微信小程序的技术原理
  17. Java基础学习——第十四章 网络编程
  18. 转:网络模拟利器NEWT的前世今生
  19. Windows7SP1补丁包(Win7补丁汇总)截至2011年04月更新 32位64位
  20. 于氏:简单监控全网服务

热门文章

  1. 使用 trt 的int8 量化和推断 onnx 模型
  2. 微信小程序data数组push和remove问题
  3. gnocchi中的resource/metric/measure等的关系
  4. Safari/Chrome调试WebView
  5. ubuntu连不上网解决
  6. 定点数与浮点数的表示方法
  7. 半岛酒店集团荣膺首个及唯一酒店品牌旗下所有酒店俱荣获《福布斯旅游指南》五星尊贵地位
  8. 使用标定文件出错:does not match name narrow_stereo in file /home/michael/.ros/camera_info/head_camera.yaml.
  9. PowerMock笔记
  10. TensorFlow入门:滑动平均模型