SpringRetry重试机制(3秒上手)

news2025/2/26 22:16:18

目录

  • 前言
  • 一、SpringRetry的使用
    • 1.1 引入依赖
    • 1.2 开启重新机制
    • 1.3 3 在方法上添加@Retryable
    • 1.3.4 编写重试失败后的执行的方法
    • 测试

前言

SpringRetry重试机制在实际工作中的场景,比如:

  • 发送消息失败,需要重新发送。
  • 调用远程服务失败,需要重新发送。

这些错误可能是因为网络波动造成的,等待过后重处理就能成功。spring-retry可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。

一、SpringRetry的使用

1.1 引入依赖

基于AOP实现,因此还需引入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>

1.2 开启重新机制

springboot入口类添加注解 @EnableRetry
在这里插入图片描述

1.3 3 在方法上添加@Retryable

@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 1000, multiplier = 1))

参数的含义:

  • value:抛出指定异常才会重试
  • include:和value一样,默认为空,当exclude也为空时,默认所有异常
  • exclude:指定不处理的异常
  • maxAttempts:最大重试次数,默认3次
  • backoff:重试等待策略,默认使用@Backoff,@Backoff的value默认为1000(单位毫秒),我们设置为2000;multiplier(指定延迟倍数)默认为0,表示固定暂停1秒后进行重试,如果把multiplier设置为1.5,则第一次重试为2秒,第二次为3秒,第三次为4.5秒。

  /**
     * value:抛出指定异常才会重试
     * include:和value一样,默认为空,当exclude也为空时,默认所有异常
     * exclude:指定不处理的异常
     * maxAttempts:最大重试次数,默认3次
     * backoff:重试等待策略,
     * 默认使用@Backoff,@Backoff的value默认为1000L,我们设置为2000; 以毫秒为单位的延迟(默认 1000)
     * multiplier(指定延迟倍数)默认为0,表示固定暂停1秒后进行重试,如果把multiplier设置为1.5,则第一次重试为2秒,第二次为3秒,第三次为4.5秒。
    
     */

@Override
    @Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 1000, multiplier = 1))
    public String test(int n) {
        log.info("测试一下:{}",n);
        //模拟业务出错
        if(1==1 )throw  new RuntimeException("自定义异常");
        return "200";
    }

1.3.4 编写重试失败后的执行的方法

当重试耗尽时还是失败,会出现什么情况呢?

当重试耗尽时,RetryOperations可以将控制传递给另一个回调,即RecoveryCallback。Spring-Retry还提供了@Recover注解,用于@Retryable重试失败后处理方法。如果不需要回调方法,可以直接不写回调方法,那么实现的效果是,重试次数完了后,如果还是没成功没符合业务判断,就抛出异常。

   /**
     * Spring-Retry还提供了@Recover注解,用于@Retryable重试失败后处理方法。
     * 如果不需要回调方法,可以直接不写回调方法,那么实现的效果是,重试次数完了后,如果还是没成功没符合业务判断,就抛出异常。
     * 可以看到传参里面写的是 Exception e,这个是作为回调的接头暗号(重试次数用完了,还是失败,我们抛出这个Exception e通知触发这个回调方法)。
     * 注意事项:
     * 方法的返回值必须与@Retryable方法一致
     * 方法的第一个参数,必须是Throwable类型的,建议是与@Retryable配置的异常一致,其他的参数,需要哪个参数,写进去就可以了(@Recover方法中有的)
     * 该回调方法与重试方法写在同一个实现类里面
     *
     * 由于是基于AOP实现,所以不支持类里自调用方法
     * 如果重试失败需要给@Recover注解的方法做后续处理,那这个重试的方法不能有返回值,只能是void
     * 方法内不能使用try catch,只能往外抛异常
     * @Recover注解来开启重试失败后调用的方法(注意,需跟重处理方法在同一个类中),此注解注释的方法参数一定要是@Retryable抛出的异常,否则无法识别,可以在该方法中进行日志处理。

     */
    @Recover
    public String recover(Exception e, int n)  {
        System.out.println("重试后也未成功,才会执行的方法,发邮箱通知后台人员,记日志");
        return "400";
    }

测试

在这里插入图片描述

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

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

相关文章

5.2 在操作系统上安装部署HAProxy

HAProxy可以在各种主流的Linux发行版、主流的Unix操作系统&#xff08;如Fredsd、Solaris&#xff09;安装和稳定高效的运行&#xff0c;从HAProxy提供的安装文档“INSTALL”上&#xff0c;可以获得这些信息&#xff0c;如图5-3所示。 图5- 3 有两种安装HAProxy的方法&#xff…

Java | 一分钟掌握定时任务 | 8 - XXL-Job分布式定时任务

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 java定时任务的框架可真是多啊&#xff0c;XXL-JOB也是一个分布式任务…

开源进展|WeCross v1.3.0发布,支持适配FISCO BCOS v3.0

WeCross是微众银行自主研发并完全开源的区块链跨链协作平台&#xff0c;致力于促进跨行业、机构和地域的跨区块链信任传递和商业合作&#xff0c;有助于实现异构区块链系统之间安全可信的互操作。 WeCross v1.2.0自发布以来&#xff0c;得到了众多社区伙伴的支持和反馈。目前&…

内网渗透(八十)之搭建额外域控

搭建额外域控 我们在之前搭建完成Windows Server 2012 R2 域控的基础上搭建一个额外的域控。多个域控的好处在于,当其中有域控出现了故障,仍然能够由其他域控来提供服务。选择一台Windows Server 2012 R2 服务器作为额外域控,主机名为DC2. 首先在DC2上配置IP地址为192.168…

如何有效控制城镇供水管网漏损

漏损问题是影响城镇供水管网稳定与可靠运行的重要问题。其中&#xff0c;城镇供水管网运行中&#xff0c;一旦存在漏损情况不仅会对供水管网的供水水质产生影响&#xff0c;导致其水质降低&#xff0c;而且会出现供水压力与供水量减少等变化&#xff0c;对供水企业的供水服务质…

硬核数据处理笔记本推荐(2023版)

2023年硬核数据处理笔记本推荐它来了&#xff01;&#xff01;&#xff01;在大家的呼声中它来了&#xff01;&#xff01;&#xff01; 去年的推荐收货不少好评&#xff0c;今年继续为大家分享选购攻略&#xff01; 选购背景&#xff1a; 1.今年英特尔处理器挤牙膏、出套娃…

【开源】diy一个wifi遥控小飞机

完成效果&#xff1a; 童年的纸飞机 资料中包含了PCB和参考的小飞机模型&#xff0c;我当时是用某宝上几块钱的手抛小飞机改装的&#xff0c;需要一定的动手能力。 硬件 材料 720空心杯电机 * 2107正反桨一对&#xff0c;搭配电机3.7V 300mAh锂离子电池 * 1控制板 * 148cm手…

【C++】异常+智能指针+特殊类和类型转换

上天可能觉得我太孤独&#xff0c;派你来和我一起对抗虚无。 文章目录 一、异常1.传统处理错误的方式vs异常2.异常的使用规则2.1 异常的抛出和捕获原则2.2 在函数调用链中异常栈展开匹配原则 3.异常安全和异常规范4.自定义异常体系5.标准库的异常体系和异常的优缺点 二、智能指…

Rocketmq简单使用

1.引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.7.0</version></dependency><dependency><groupId>org.apache.rocketmq</groupId>&l…

22.vue插槽

目录 1 基本使用 2 name属性与v-slot 3 插槽放默认内容(后备内容) 4 插槽的自定义属性(作用域插槽) 4.1 简单使用 4.2 传data 4.3 支持解构 插槽操作就是写在组件中间的东西&#xff0c;其目的是增加组件在UI结构上的复用性&#xff0c;就像下面这样 直接写是渲染…

chatgpt赋能Python-python_ipynb

Python Ipython Notebook: 大数据时代的完美解决方案 在大数据时代&#xff0c;数据处理和分析是许多组织必须面对的挑战。Python Ipython Notebook (IPYNB) 可以提高数据探索性分析的效率&#xff0c;并能够使您更好地理解和评估数据。本文将介绍Python IPYNB是什么、以及为什…

C++设计手段的智慧:从基础到前沿

C设计手段的智慧&#xff1a;从基础到前沿 一、C基础设计手段&#xff08;Basic Design Techniques in C&#xff09;1.1 C 类和对象设计1.1.1 类的定义1.1.2 对象的创建和使用1.1.3 类的封装1.1.4 类的继承1.1.5 类的多态 1.2 RAII of C design tools (resource acquisition i…

ROS学习笔记(九):MoveIt!与机械臂控制

ROS学习笔记&#xff08;九&#xff09;&#xff1a;MoveIt&#xff01;与机械臂控制 MoveIt&#xff01;简介MoveIt&#xff01;系统架构MoveIt&#xff01;编程与机械臂控制关节空间规划工作空间规划笛卡尔运动规划避障规划 Pick and Place示例 MoveIt&#xff01;简介 Move…

一图看懂!RK3568与RK3399怎么选?

▎简介 RK3568和RK3399都是Rockchip公司的处理器&#xff0c;具有不同的特点和适用场景。以下是它们的主要区别和应用场景。 ▎RK3568 RK3568是新一代的高性能处理器&#xff0c;采用了22nm工艺&#xff0c;具有更高的性能和更低的功耗。它支持4K视频解码和编码&#xff0c;支持…

某程序员辞职后,接6份兼职,月入3w+

对于程序员来说&#xff0c;35岁真的是很关键。 如果成为架构师或者是成为管理方面的人才&#xff0c;还是不用担心失业。要是你30多岁还在一线写代码&#xff0c;那被裁的可能性很大。即使你现在没有失业&#xff0c;也说明你能力很一般。 最近在职场论坛上看到这样一个帖子…

互联网广告丨行业知识储备

文章状态&#xff1a;持续更新中 更新时间&#xff1a;2023.05.22 本文不同于专业咨询机构输出的专业行业调研报告&#xff0c;仅作为产品经理对互联网广告行业的一些基础知识储备。文章会以产品经理的角度&#xff0c;从行业概述、行业目标与愿景、行业生态、行业的发展、行业…

数仓中指标-标签,维度-度量,自然键-代理键等各名词深度解析

作为一个数据人&#xff0c;是不是经常被各种名词围绕&#xff0c;是不是对其中很多概念认知模糊。有些词虽然只有一字之差&#xff0c;但是它们意思完全不同&#xff0c;今天我们就来了解下数仓建设及数据分析时常见的一些概念含义及它们之间的关系。 本文首发于公众号【五分钟…

LiveNVR视频平台接收无人机等移动终端RTMP推流后转成GB28181协议输出级联到GB28181视频平台的操作说明...

1、需求介绍 目前很多移动终端设备(如无人机等)只支持RTMP推流输出&#xff0c;不支持GB28181协议。但是又有需要通过GB28181协议接入到视频平台的需求。比如有些大疆无人机产品不能直接注册国标平台&#xff0c;只能rtmp推流。那么&#xff0c;项目中如果将无人机的rtmp的推流…

Stablediffusion模型diffusesr格式和ckpt格式相互转换

参考资料&#xff1a; diffusers的源码 [github] 因为小博客可能看的人很少&#xff0c;所以我写的啰嗦一点&#xff0c;想直接看如何互相转换的朋友可以直接转到文末的代码段。 当你在学习Stablediffusion这个开源的t2i模型时&#xff0c;不可避免地会碰到两种模型权重的存储格…

在rk3568移植rtl8723du,配置成wifi ap模式

1、在路径添加rtl8723du模块代码 kernel/drivers/net/wireless/rockchip_wlan 添加rtl8723du 2、修改Makefile 修改对应的路径 修改交叉编译的工具的路径和内核路径 3、修改rockchip_wlan目录下的Makefile 添加这个 obj-$(CONFIG_RTL8723DU) rtl8723du/ 4、修改rockchip_w…