Spring-retry 文章目录 Spring-retry 入门 声明式示例 命令式示例 构建 特性和API RetryTemplate RetryContext RecoveryCallback
今天来学习一下spring-retry实现重试功能,在实际项目中这种场景也是比较常见的,如果我们自己用代码实现,但是这种方式侵入性太强,不够优雅 原理 基于aop来实现的 如果找不到注解则自行添加 < dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <
Retryable - 表示这个方法需要重试,它有很丰富的参数,可以满足你对重试的需求 @Backoff - 表示重试中的退避策略 @Recover - 兜底方法,即多次重试后还是失败就会执行这个方法 Spring-Retry
## Spring-Retry 重试实现原理 发表于 2019-03-01 | 分类于 [java ](https://albenw.github.io/categories/java/), [spring Retryable - 表示这个方法需要重试,它有很丰富的参数,可以满足你对重试的需求 @Backoff - 表示重试中的退避策略 @Recover - 兜底方法,即多次重试后还是失败就会执行这个方法 Spring-Retry
二、重试组件介绍 目前市面上比较成熟并且可以商用的重试组件有两个,分别是spring-retry和guava-retrying,这里我们对两者简单做一下对比。 spring-retry spring家族的组件,和spring无缝融合 支持注解,开箱即用,降低开发人员学习和开发成本 不支持自定义返回类型重试,必须通过抛异常方式 不支持方法粒度recover guava-retrying 重试策略友好,支持自定义返回类型重试 不支持注解 三、spring-retry小试牛刀 spring-retry的使用特别简单,引入依赖之后,使用注解开启重试能力,然后就可以在需要重试的方法或者类上使用注解重试 1:引入依赖&开启重试 引入pom依赖: <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry 总结 通过这边文章,相信大家对于重试框架有了比较深刻的体会,对于spring-retry框架的实现原理也有了大致的理解,通过分析其优缺点我们也学习了spring-retry框架帮我们解决了什么问题
点击上方蓝色字体,选择“设为星标” 回复”学习资料“获取学习宝典 一 重试框架之Spring-Retry Spring Retry 为 Spring 应用程序提供了声明性重试支持。 Spring-Retry的普通使用方式 1.准备工作 我们只需要加上依赖: <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>1.2.2.RELEASE</version> </dependency> 准备一个任务方法 </groupId> <artifactId>spring-retry</artifactId> <version>1.2.2.RELEASE</version> </dependency 但是明显感觉得到,guava-retry在使用上更便捷,更灵活,能根据方法返回值来判断是否重试,而Spring-retry只能根据抛出的异常来进行重试。
Spring-Retry的普通使用方式 2. Spring-Retry的注解使用方式 二 重试框架之Guava-Retry 总结 ---- 一 重试框架之Spring-Retry Spring Retry 为 Spring 应用程序提供了声明性重试支持 Spring-Retry的普通使用方式 1.准备工作 我们只需要加上依赖: <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>1.2.2.RELEASE</version> </dependency> 准备一个任务方法 但是明显感觉得到,guava-retry在使用上更便捷,更灵活,能根据方法返回值来判断是否重试,而Spring-retry只能根据抛出的异常来进行重试。
来源:blog.csdn.net/zzzgd_666/article/details/84377962 一 重试框架之Spring-Retry Spring Retry 为 Spring 应用程序提供了声明性重试支持 Spring-Retry的普通使用方式 1.准备工作 我们只需要加上依赖: <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>1.2.2.RELEASE</version> </dependency> 准备一个任务方法 </groupId> <artifactId>spring-retry</artifactId> <version>1.2.2.RELEASE</version> </dependency 但是明显感觉得到,guava-retry在使用上更便捷,更灵活,能根据方法返回值来判断是否重试,而Spring-retry只能根据抛出的异常来进行重试。
然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。 @Retryable是什么? spring系列的spring-retry是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释的。 使用步骤 1. POM依赖 <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId Spring-Retry还提供了@Recover注解,用于@Retryable重试失败后处理方法。
然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。 一、@Retryable是什么? spring系列的spring-retry是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释的。 二、使用步骤 1.POM依赖 <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry Spring-Retry还提供了@Recover注解,用于@Retryable重试失败后处理方法。
于是我给小妹推荐了超好用的重试框架,spring-retry。 简介与快速接入 spring-retry 是 Spring 全家桶中提供的开源重试框架,如果你用的是 Spring Boot 项目,那么接入起来会非常简单,只需要三步即可实现快速接入。 springboot项目都不用引入版本号--> <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry artifactId>spring-aspects</artifactId> </dependency> 第二步,在启动类上加注解 @EnableRetry 此举是让你的 Spring Boot 项目支持 spring-retry com.opensource.service.retry.RetryRequestService$$FastClassBySpringCGLIB$$50f0bdca.invoke(<generated>) 总结 怎么样,spring-retry
支付回调失败重试等等,一切因为网络,非逻辑性错误等不确定因素引起的失败都可以加上重试的机制,来增强系统的健壮性,博主也处理过文件上传到第三方oss服务失败增加重试的事例,在这之前不知道spring有个spring-retry 现在我们来看看spring boot项目中怎么使用spring-retry来处理是失败重试的问题 1.导入依赖 <dependency> <groupId>org.springframework.boot artifactId> </dependency> <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry BootRetryApplication.class, args); } } ps:别忘了@EnableRetry注解开启重试 github项目地址:https://github.com/spring-projects/spring-retry
然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。 spring系列的spring-retry是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释的。 doc.iocoder.cn/video/ 使用步骤 POM依赖 <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry Spring-Retry还提供了@Recover注解,用于@Retryable重试失败后处理方法。
然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。 spring系列的spring-retry是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释的。 YunaiV/onemall 使用步骤 POM依赖 <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry Spring-Retry还提供了@Recover注解,用于@Retryable重试失败后处理方法。
你说巧不巧,我今天给你分享这个的东西,就把重试功能抽离的非常的好: https://github.com/spring-projects/spring-retry 用上 spring-retry 之后 比如 spring-retry 的 github 上的 Quick Start 就非常简洁易懂。 它分别提供了注解式开发和编程式开发的示例。 但是这里也暴露了一个 Spring-retry 的弊端,就是必须要通过抛出异常的方式来触发相关业务。 如果你要用 Spring-retry 会怎么做? 那么问题就来了:Spring-retry 是怎么知道我的重试方法就是 channelNotResp 的呢?
然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。 一、@Retryable spring系列的spring-retry是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释的。 二、使用步骤 1、POM依赖 <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry Spring-Retry还提供了@Recover注解,用于@Retryable重试失败后处理方法。
2.2.0开始,重试功能作为一个新的项目Spring Retry单独维护,在spring官网上并没有此独立的项目存在,项目源码地址:https://github.com/spring-projects/spring-retry -- https://mvnrepository.com/artifact/org.springframework.retry/spring-retry --> <dependency> < groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>
然而 spring-retry 却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。 @Retryable 是什么? Spring 系列的 spring-retry 是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在 spring-retry 中,所有配置都是基于简单注释的。 POM 依赖: <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId Spring-Retry 还提供了 @Recover 注解,用于 @Retryable 重试失败后处理方法。
与主流的Spring-Retry, Guava-Retry等单任务同步重试框架不同,Fast-Retry是一个支持异步重试框架,支持异步任务的重试、超时等待、回调。 Spring-Retry, Guava-Retry均无法支持大批量任务的重试,即使加入线程池也无法解决,因为实际每个重试任务都是单独的同步逻辑,然后会会占用过多线程资源导致大量任务在等待处理,随着任务数的增加 秒重试一次,总耗时10秒 未测预计公式: 当我们使用线程池的时候, 一般线程池中 总任务处理耗时 = 任务数/并发度 x 单个任务重试耗时 可以看到即使是处理100万个任务,Fast-Retry的性能也比Spring-Retry
如下(参考上一节代码): //restTemplate.setErrorHandler(new MyRestErrorHandler()); 一、Spring Retry配置生效 通过maven坐标引入spring-retry ,spring-retry的实现依赖于面向切面编程,所以引入aspectjweaver。 <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId