重试机制-spring-retry、guava-retry

重试机制是什么?

网络重试机制是用于在网络通信中处理失败的请求。接口重试可以在一定的时间间隔内多次尝试发送相同的请求,直到请求成功或达到最大重试次数为止。

为什么要重试?

1. 提高请求的成功率:网络通信中可能会出现各种问题,如网络延迟、连接超时、服务器错误等。通过接口重试机制,可以尝试多次发送请求,增加请求成功的可能性。

2. 处理瞬时故障:有时候,请求失败是由于短暂的网络故障或服务器负载过高等瞬时问题引起的。通过接口重试,可以在稍后的尝试中成功发送请求,而无需手动干预。

3. 自动化处理:接口重试可以自动处理请求失败的情况,无需手动干预。这样可以减少开发人员的工作量,并提高系统的稳定性和可靠性。

注意:接口重试并不是万能的解决方案,有时候请求失败可能是由于永久性的问题,如无效的请求参数或者权限不足等。在设计接口重试机制时,需要考虑到这些情况,并设置合理的重试策略和最大重试次数。

重试的场景有哪些?

网络不稳定导致请求失败;

服务端繁忙,导致响应时间过长;

服务端出现故障,导致请求失败;

传参错误等错误,导致请求失败;

第三方接口调用失败,例如:钉钉、微信、权限等。

如何进行重试?

①、固定次数重试

设置一个固定的重试次数,在每次请求失败时都重新发送请求,直到达到最大重试次数或请求成功为止。

②、spring-retry

spring提供的请求重试组件,根据配置的重试策略进行重试

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

开启重试功能:

在启动类或者配置类上添加 @EnableRetry 注解

在需要重试的方法上添加 @Retryable 注解:标志当前方法使用重试机制

@Backoff:等待多久开始重试(指定重试的次数、时间间隔)

默认重试次数是3次,重试间隔是1s

@Retryable(maxAttempts = 3,backoff = @Backoff(delay = 2000,multiplier = 2))

@Recover:当重试达到指定次数之后,会调用指定的方法来进行日志记录等操作

@Recoverpublic void recover(RuntimeException  e){System.out.println("达到最大重试次数"+e);
}

注意:@Recover 注解标记的方法必须和被 @Retryable 标记的方法在同一个类中

代码演示:

@Service
public class SpringRetryServiceImpl {@Autowiredprivate LoginServiceImpl loginService;@Retryable(maxAttempts = 3,backoff = @Backoff(delay = 2000,multiplier = 2))public String getUserInfo(String id) throws Exception {System.out.println("开始时间"+System.currentTimeMillis());JSONObject bodyJson = loginService.getUserService(id);if (!bodyJson.get("code").equals(200)) {throw new Exception("失败");}return "调用成功";}@Recoverpublic void recover(Exception e){System.out.println("达到最大重试次数"+e);}
}

 ③、guava-retry

能够根据 返回值 来判断是否需要重试

@Service
public class GuavaImpl {@Autowiredprivate LoginServiceImpl loginService;public String getUserInfo(String id) throws Exception {Callable<String> task = new Callable<String>() {@Overridepublic String call() throws Exception {JSONObject bodyJson = loginService.getUserService(id);if (!bodyJson.get("code").equals(200)) {throw new Exception("失败");}return "调用成功";}};Retryer<String> retryer = RetryerBuilder.<String>newBuilder()//无论出现什么异常,都进行重试.retryIfException()//返回结果为 error时,进行重试.retryIfResult(result -> Objects.equals(result, "error"))//重试等待策略:等待 2s 后再进行重试.withWaitStrategy(WaitStrategies.fixedWait(2, TimeUnit.SECONDS))//重试停止策略:重试达到 3 次.withStopStrategy(StopStrategies.stopAfterAttempt(3)).withRetryListener(new RetryListener() {@Overridepublic <V> void onRetry(Attempt<V> attempt) {System.out.println("RetryListener: 第" + attempt.getAttemptNumber() + "次调用");}}).build();try {retryer.call(task);} catch (Exception e) {e.printStackTrace();}return "调用成功";}
}

超时:服务不要一直在服务端进行堆积(影响新请求处理/系统崩溃),请求超过设置时间没有被处理就取消或抛异常

重试:和超时绑定,多次发送相同

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

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

相关文章

【Linux指令集】---git命令的基本使用

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Linux专栏】&#x1f388; 本专栏旨在分享学习Linux的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 演示环境&#xff1…

git使用,一点点

查看自己有没有安装git git --version 如果没有安装请执行sudo yum install -y git来安装 git 指令 git log 查看日志 git pull 同步远端和本地仓库 这就是冲突的报错&#xff1a; 所以这个时候你要同步一下git pull

网络-fetch

文章目录 前言一、fetch简介优点&#xff1a;缺点&#xff1a; 二、使用getpost进度实现取消请求超时实现 总结 前言 本文主要记录浏览器与服务端网络通讯 fetch 的介绍与使用&#xff0c;将完成get、post、进度、取消请求、和超时请求的功能实现。 一、fetch简介 fetch作为继…

国庆day2---select实现服务器并发

select.c&#xff1a; #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__:",__LINE__);\perror(msg);\ }while(0)#define IP "192.168.1.3" #define PORT 8888int main(int argc, const char *argv[]) {//创建报式套接字socketi…

3. 文档操作

1. 创建文档 1.1 创建一个文档 在相应的索引下面使用_doc创建文档&#xff0c;地址为&#xff1a;http://127.0.0.1:9200/students/_doc&#xff0c;创建一个姓名张三的学生信息&#xff1a; {"姓名":"张三","年级":5,"班级":2,&qu…

渐变色毛玻璃形态卡悬停效果

效果展示 页面结构组成 从上述的效果展示可以看出&#xff0c;页面的组成部分主要包含这几个部分&#xff1a; 渐变色的底层方块毛玻璃的内容层内容层上的两个小方块 CSS 知识点 transformlinear-gradient 实现页面结构布局 <div class"box"><span>…

竞赛 大数据疫情分析及可视化系统

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据疫…

笔记本电脑查询连接wifi密码

笔记本电脑查询连接wifi密码 1、背景2、环境3、实操3.1、已连接wifi查看密码3.2、之前连接过的wifi密码查看 1、背景 在日常使用过程中遇到两个使用场景。网络管理员跳过一下步骤&#xff0c;针对wifi使用人员。 1、刚到一个新环境中需要连接wifi的场景 2、在一个场所连接过一…

.Net Core后端架构实战【介入IOC控制反转】

引言 Inversion of Control,简称IOC,即控制反转。记得当初刚实习的时候公司的带我的人和我提到过IOC这个概念,当初完全不知道是 啥东西。后来有幸写了半年Java,SpringBoot里面业务开发随处可见IOC。再后来我写.Net Core用到的第一个框架Blog.Core项目,它里 面IRepository与R…

MATLAB中d2d函数用法

目录 语法 说明 示例 重新采样离散时间模型 重新采样已识别的离散时间模型 d2d函数的功能是重新采样离散时间模型。 语法 sys1 d2d(sys, Ts) sys1 d2d(sys, Ts, method) sys1 d2d(sys, Ts, opts) 说明 sys1 d2d(sys, Ts)将离散时间动态系统模型 sys 重新采样&#…

集合-List集合

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 文章目录 目录 系列文章目录 文章目录 前言 一 . 什么是List? 二 . List集合的特点 三 . 常用方法 1.void add(int index, E element): 将指定的元素插入到列表的指定位置。 2.E remove(int in…

StarRocks数据导入

1、相关环境 Flink作为当前流行的流式计算框架&#xff0c;在对接StarRocks时&#xff0c;若直接使用JDBC的方式"流式"写入数据&#xff0c;对StarRocks是不友好的&#xff0c;StarRocks作为一款MVCC的数据库&#xff0c;其导入的核心思想还是"攒微批降频率&qu…

ChatGPT App迎来重大更新;人工智能应用于应对气候变化

&#x1f989; AI新闻 &#x1f680; ChatGPT App迎来重大更新&#xff1a;增加多模态交互方式 摘要&#xff1a;OpenAI最近宣布了ChatGPT App的重大更新&#xff0c;新版的ChatGPT增加了多模态交互方式&#xff0c;用户可以向AI展示正在谈论的内容&#xff0c;比如拍照并询问…

Linux学习[21]账号与群组1---linux中/etc/passwd与/etc/shadow字段说明

文章目录 前言1. passwd字段说明2. shadow字段说明总结 前言 修改树莓派某个用户的权限到管理员权限的时候&#xff0c;涉及到了对/etc/passwd文件的修改&#xff0c;其中的字段具体含义当时也是模棱两可的&#xff0c;最近看了看相关书籍之后&#xff0c;这里做一个说明。 同…

零基础Linux_10(进程)进程终止(main函数的返回值)+进程等待

目录 1. 进程终止 1.1 main函数的返回值 1.2 进程退出码和错误码 1.3 进程终止的常见方法 2. 进程等待 2.1 进程等待的原因 2.2 wait 函数 2.3 waitpid 函数 2.4 int* status参数 2.5 int options非阻塞等待 本篇完。 1. 进程终止 进程终止指的就是程序执行结束了&…

基于树莓派CM4制作img系统镜像批量制作TF卡

文章目录 前言1. 环境与工具2. 制作镜像3. 烧录镜像4. 总结 前言 树莓派烧录完系统做定制化配置比较费时间。在面对大批量的树莓派要配置&#xff0c;那时间成本是非常巨大的。第一次配置完可以说是摸着石头过河&#xff0c;但是会弄了以后再配置&#xff0c;都是一些重复性操…

MYSQL8解压版 windows 主从部署步骤及配置(包含配置文件,教程文件,免积分下载)

MYSQL8解压版 windows 主从部署步骤及配置 一.安装MSYQL 这里只讲大概,详细步骤、my.ini文件、安装包等会在页尾文件中(正常情况按首个mysql安装,只是名字有区别) 1.主库my.ini配置 [mysqld] #典型的值是5-6GB(8GB内存)&#xff0c;8-11GB(16GB内存), 20-25GB(32GB内存)&…

【CVPR 2023】DSVT: Dynamic Sparse Voxel Transformer with Rotated Sets

文章目录 开场白效果意图 重点VoxelNet: End-to-End Learning for Point Cloud Based 3D Object DetectionX-Axis DSVT LayerY-Axis DSVT Layer Dynamic Sparse Window AttentionDynamic set partitionRotated set attention for intra-window feature propagation.Hybrid wind…

Leetcode242. 有效的字母异位词

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 解题思路&#…

(二) gitblit用户使用教程

(一)gitblit安装教程 (二) gitblit用户使用教程 (三) gitblit管理员手册 目录 网页访问git客户端设置推送错误配置查看当前配置 日常使用仓库分组my profile修改上传代码简洁 网页访问 点击Advanced... 点击Accept the Risk and Contiue 初始用户名和密码都是admin,点击login…