😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程
🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~
Spring Boot 整合 Fast Retry 来实现重试机制
前言
在外面日常开发中,服务之间的调用往往存在延迟和失败的情况。比如之前博主写的一篇【Spring Boot集成 Spring Retry 实现容错重试机制并附源码】
中提到的例如:
短信发送
、
远程服务调用
、
争抢锁
等场景,当正常调用发生异常时,例如:
网络延迟
、
服务宕机
或
临时故障
等问题。
为了提高服务的可靠性,我们可以使用重试机制来处理这些问题,之前我们已经介绍了
Spring Retry
,今天我们介绍另外一款轻量级的
Fast Retry
库。
什么是 Fast Retry?
Fast Retry
是一个轻量级的 Java 重试库,它可以方便地为方法调用添加重试机制。它支持自定义重试策略和异常处理,能够提高服务的容错能力,主要它支持百万级任务的异步重试~
Fast Retry 和 Spring Retry怎么选?
Fast Retry
是一款轻量级、高性能的重试工具,适合简单场景和高性能需求的项目;而
Spring Retry
则提供了更多的功能和灵活性,尤其是在与
Spring
生态集成时具备更强的优势。
在一些简单的项目中,
Spring Retry
作为
Spring
的家族成员,博主还是比较推荐选用,但是针对一些高并发、高性能需求的情况下,我们就需要借助
Fast Retry
了,因为它支持百万级任务的异步重试!
本文主要介绍快速整合Fast Retry,一些高并发的业务场景后续博主再写一篇展开详解;或者小伙伴有其它想了解的也可以评论留言~
实战开始
❶ 初始化项目
构建你的 Spring Boot 项目,在pom.xml中引入依赖
<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Fast Retry --><dependency><groupId>com.github.kristofa</groupId><artifactId>fast-retry</artifactId><version>2.0.0</version></dependency></dependencies>
❷ 编写一个简单的重试逻辑
创建一个简单的服务,该服务将在调用失败时重试。我们将使用
@Retryable
注解来实现重试功能。
importcom.github.kristofa.retry.Retryer;importorg.springframework.stereotype.Service;importorg.springframework.retry.annotation.Backoff;importorg.springframework.retry.annotation.EnableRetry;importorg.springframework.retry.annotation.Retryable;@Service@EnableRetrypublicclassUserService{@Retryable(
value ={RuntimeException.class},
maxAttempts =5,
backoff =@Backoff(delay =2000))publicStringgetUserData(String userId){// 模拟一个随机失败的请求if(Math.random()>0.5){thrownewRuntimeException("无法获取用户数据...请重试");}return"获取到用户数据: "+ userId;}}
❸ 控制器实现
现在我们实现一个UserController控制器来调用上面的 UserService重试服务
importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassUserController{privatefinalUserService userService;publicUserController(UserService userService){this.userService = userService;}@GetMapping("/user/{id}")publicStringgetUser(@PathVariableString id){return userService.getUserData(id);}}
❹ 测试重试机制
现在,启动应用并测试重试机制。通过浏览器或 Postman 访问
http://localhost:8080/user/{id}
,多次请求将会展示重试的效果。
结语
通过整合
Fast Retry
,我们成功地在
Spring Boot
应用中实现了简单的重试机制。你可以根据业务需求调整重试次数和延迟时间,以便更好地处理服务间的失败和延迟问题。
如果本文对您有所帮助,希望 一键三连 给博主一点点鼓励,如果您有任何疑问或建议,请随时留言讨论!
至于Spring Retry的详解,可以参考博主写的【Spring Boot集成 Spring Retry 实现容错重试机制并附源码】
版权归原作者 Micro麦可乐 所有, 如有侵权,请联系我们删除。