SpringBoot集成接口重试Retry

SpringBoot集成接口重试Retry

前言

在实际的应用中,我们经常需要调用第三方API来获取数据或执行某些操作。然而,由于网络不稳定、第三方服务异常等原因,API调用可能会失败。为了提高系统的稳定性和可靠性,我们通常会考虑实现重试机制。

集成

1、引入pom坐标

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

同时需要aop的依赖包:

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

启动类加注解:

@EnableRetry

2、代码示例

2.1配置重试策略
	@Override@Retryable(value = {RestClientException.class},maxAttempts = 3,backoff = @Backoff(delay = 1000,multiplier = 2))public String callThirdPartyApi() {//调用第三方API接口逻辑return null;}

@Retryable注解标记了callThirdPartyApi方法,指定了当发生RestClientException异常时进行重试。

maxAttempts指定最大重试次数。

backoff指定了重试间隔的初始延迟和延迟倍数。

2.2降级处理
	@Override@Retryable(value = {RestClientException.class},maxAttempts = 3,backoff = @Backoff(delay = 1000,multiplier = 2))public String callThirdPartyApi() {//调用第三方API接口逻辑return null;}@Recoverpublic String fallback(){//降级处理逻辑return null;}

@Recover注解标记了fallback方法,当callThirdPartyApi方法的重试次数达到上限时,将执行fallback方法中的降级逻辑。

2.3异步方法的重试及降级
	@Async@Retryable(value = {RestClientException.class},maxAttempts = 3,backoff = @Backoff(delay = 1000,multiplier = 2))public CompletableFuture<String> callAsyncThirdPartyApi() {//调用第三方API接口逻辑}@Recoverpublic CompletableFuture<String> fallback() {// 异步降级处理逻辑}
2.4异常分类与重试
@Retryable(value = { RestClientException.class, TimeoutException.class },maxAttempts = 3,backoff = @Backoff(delay = 1000, multiplier = 2))public String callThirdPartyApi() {// 调用第三方API的逻辑// ...}

callThirdPartyApi方法会在发生RestClientExceptionTimeoutException异常时进行重试。

@Retryable(value = { RestClientException.class },maxAttempts = 3,backoff = @Backoff(delay = 1000, multiplier = 2),exclude = { TimeoutException.class })public String callThirdPartyApi() {// 调用第三方API的逻辑// ...}

callThirdPartyApi方法会在发生RestClientException异常时进行重试,但排除了TimeoutException异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SDR架构 (一)为什么基带有I和Q路?

我之前做过自己的RTL-SDR。一直有一个疑惑。为啥rtl2832u芯片有一对差分I路&#xff0c;还有一对差分Q路。差分很好理解是为了抗干扰&#xff0c;但为啥要I和Q呢&#xff1f;并且我也知道不少人在自己修改的时候&#xff0c;保留I路对接在r820t2&#xff08;跟原版一样&#xf…

整数与IP地址间的转换(牛客网算法/Javascript Node)

描述 原理&#xff1a;ip地址的每段可以看成是一个0-255的整数&#xff0c;把每段拆分成一个二进制形式组合起来&#xff0c;然后把这个二进制数转变成 一个长整数。 举例&#xff1a;一个ip地址为10.0.3.193 每段数字 相对应的二进制数 10 00001010 0 00000000 3 00000011 193…

开放签电子签章企业版上线【移动端功能(v1.5版本)】

春节序曲奏响创新华章&#xff0c;紧锣密鼓的工作节奏下&#xff0c;开放签支持移动端签署啦&#xff01; 在这个万家灯火的春节之际&#xff0c;开放签团队凭借高效的团队协作&#xff0c;在节日的热烈氛围中成功推出了全新版本&#xff08;企业版1.5版&#xff09;&#xff…

逆变器专题(12)-弱电网

相应仿真原件请移步资源下载 通常情况下&#xff0c;理想电网都为强电网&#xff0c;但随着光伏并网系统的大力发展&#xff0c;分布式光伏也越发鼎盛&#xff0c;越来越多的电力电子设备接入大电网、并且考虑能源利用问题&#xff0c;大部分光伏电站都建在戈壁沙漠等地区&…

多行业万能预约门店小程序源码系统 支持多门店预约小程序 带完整的安装代码包以及搭建教程

随着消费者对于服务体验要求的不断提升&#xff0c;门店预约系统成为了许多行业提升服务质量、提高运营效率的重要工具。然而&#xff0c;市面上的预约系统往往功能单一&#xff0c;无法满足多行业、多场景的个性化需求。下面&#xff0c;小编集合了多年的行业经验和技术积累&a…

岩土工程中的振弦采集仪技术发展与前景展望

岩土工程中的振弦采集仪技术发展与前景展望 河北稳控科技振弦采集仪是一种常用的岩土工程监测仪器&#xff0c;用于测量土壤或岩石的振动特性。随着岩土工程领域的发展和技术的进步&#xff0c;振弦采集仪技术也得到了不断的发展和改进。以下是对振弦采集仪技术发展与前景的展…

css5定位

css 一.定位1.概念&#xff08;定位定位模式边位移&#xff09;2.静态位移static&#xff08;不常用&#xff09;3.相对定位relative&#xff08;不脱标&#xff09;&#xff08;占位置&#xff09;4.绝对定位absolute&#xff08;脱标&#xff09;&#xff08;不占位置&#x…

VScode 单步断点调试Nodejs方法总结

目录 方法一 方法二 方法三 方法一 使用vscode开发nodejs程序,能够启动单步调试模式,在指定代码处添加断点,像chrome、firefox浏览器上一样进行JavaScript的调试。 新建一个nodejs的工程,编写代码后,配置代码调试的步骤: 1、切换到代码调试界面 2、界面提示,新建一…

mybatis-plus中service层的CRUD使用示例

mybatis-plus service层的CRUD使用示例 MyBatis-Plus 是 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上提供了更便捷的 CRUD 操作、分页查询、代码生成等功能。在 Service 层使用 MyBatis-Plus 进行 CRUD 操作&#xff0c;通常需要创建一个 Service 类来调用 MyBatis-Pl…

基于springboot实现在线考试系统项目【项目源码+论文说明】

基于springboot实现在线考试系统演示 摘要 时代在变化&#xff0c;科技技术以无法预测的速度在达到新的高度&#xff0c;并且被应用于社会生活的各个领域&#xff0c;随着生活的加快&#xff0c;也使很多潜在的点逐渐突显出来&#xff0c;社会对于人才的要总是非常迫切的&…

VScode保存自动格式化

要在Visual Studio Code&#xff08;VS Code&#xff09;中关闭保存自动格式化功能&#xff0c;您可以按照以下步骤操作&#xff1a; 1.打开VS Code编辑器。 2.点击左上角的“文件”菜单&#xff0c;然后选择“首选项”。 3.在弹出的菜单中&#xff0c;选择“设置”选项。…

IDEA-DeBug理论与实践

文章目录 01_Debug简介和意义02_IDEA中的Debug步骤03_跳转到当前代码执行的行04_步过调试的使用05_步入调试的使用06_强制步入调试的使用07_步出调试的使用08_回退断点调试的使用09_运行到光标处10_计算表达式11_条件断点12_多线程调试 在软件开发中&#xff0c;IDEA&#xff0…

THINKPHP 跨域报错解决方案

报错&#xff1a;has been blocked by CORS policy: Response to preflight request doesnt pass access control check: No Access-Control-Allow-Origin header is present on the requested resource. 环境&#xff1a;thinkphp6 nginx 今天和VUE配合调用接口的时候发现跨…

果园预售系统|基于Springboot的果园预售系统设计与实现(源码+数据库+文档)

果园预售系统目录 目录 基于Springboot的果园预售系统设计与实现 一、前言 二、系统功能设计 三、系统功能设计 1 、果园管理 2、水果管理 3、果树管理 4、公告管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获…

常见的4种Bug 出现原因和解决方案

某项目定期进行线上Bug分析大会&#xff0c;主要针对近期出现的Bug和事故进行分析其出现的原因。经过一段时间的数据分析和汇总&#xff0c;找到了在开发过程中&#xff0c;较为常见的Bug以及其出现的原因。 通过分析原因&#xff0c;进一步找到解决方案&#xff0c;从而有利于…

2024.02.29作业

1. TCP模型 server #include "test.h"#define SER_IP "192.168.191.128" #define SER_PORT 9999int main(int argc, char const *argv[]) {int sfd -1;sfd socket(AF_INET, SOCK_STREAM, 0);if (-1 sfd){perror("socket error");return -1;…

Java底层自学大纲_数据结构和算法篇

数据结构和算法专题_自学大纲所属类别学习主题建议课时&#xff08;h&#xff09; A 数据结构和算法001 数据结构和算法基础&#xff0c;时间复杂度Ot和空间复杂度Os2.5 A 数据结构和算法002 数学知识回顾-指数、对数、级数、模运算、复杂度2.5 A 数据结构和算法003 高数知识…

算法沉淀——动态规划之两个数组的 dp(上)(leetcode真题剖析)

算法沉淀——动态规划之两个数组的 dp 01.最长公共子序列02.不相交的线03.不同的子序列04.通配符匹配 01.最长公共子序列 题目链接&#xff1a;https://leetcode.cn/problems/longest-common-subsequence/ 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 …

0201sherlock(福尔摩斯)-通过名称寻找媒体账号(地址)-github-开源项目学习

文章目录 一 项目简介二 项目安装和演示1 安装2 演示 三 源码分析1 项目结构2 主程序源代码分析 四 添加自定义网址结语 一 项目简介 二 项目安装和演示 1 安装 # clone the repo $ git clone https://github.com/sherlock-project/sherlock.git# change the working direct…

前端访问线上的html 怎么给html 的js中传递 访问路径

1.需求 我想在项目中访问一个html 文件 这个html 文件中 跳转的又是另一个地址 。这个需求是为了让实现公众号H5 的重定向登录 主要是 一个oem 系统 他有多个公众号 但是每个公众号 都有对应不用的域名 2.动态域名 <!DOCTYPE html> <html lang"zh">&…