实现重试只知道Spring Retry?试试Spring Boot 整合 Fast Retry 来实现重试机制

ops/2024/10/24 22:05:05/

在这里插入图片描述

在这里插入图片描述

😄 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 RetrySpring 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 注解来实现重试功能。

import com.github.kristofa.retry.Retryer;
import org.springframework.stereotype.Service;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.EnableRetry;
import org.springframework.retry.annotation.Retryable;@Service
@EnableRetry
public class UserService {@Retryable(value = { RuntimeException.class },maxAttempts = 5,backoff = @Backoff(delay = 2000))public String getUserData(String userId) {// 模拟一个随机失败的请求if (Math.random() > 0.5) {throw new RuntimeException("无法获取用户数据...请重试");}return "获取到用户数据: " + userId;}
}

❸ 控制器实现

现在我们实现一个UserController控制器来调用上面的 UserService重试服务

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {private final UserService userService;public UserController(UserService userService) {this.userService = userService;}@GetMapping("/user/{id}")public String getUser(@PathVariable String id) {return userService.getUserData(id);}
}

❹ 测试重试机制

现在,启动应用并测试重试机制。通过浏览器或 Postman 访问 http://localhost:8080/user/{id},多次请求将会展示重试的效果。


结语

通过整合 Fast Retry,我们成功地在 Spring Boot 应用中实现了简单的重试机制。你可以根据业务需求调整重试次数和延迟时间,以便更好地处理服务间的失败和延迟问题。

如果本文对您有所帮助,希望 一键三连 给博主一点点鼓励,如果您有任何疑问或建议,请随时留言讨论!

至于Spring Retry的详解,可以参考博主写的【Spring Boot集成 Spring Retry 实现容错重试机制并附源码】


在这里插入图片描述


http://www.ppmy.cn/ops/128164.html

相关文章

20240818 字节跳动 笔试

文章目录 1、编程题1.11.21.31.4岗位:BSP驱动开发工程师-OS 题型:4 道编程题 1、编程题 1.1 小红的三消游戏: 小红在玩一个三消游戏,游戏中 n 个球排成一排,每个球都有一个颜色。若有 3 个颜色相同的球连在一起,则消除这 3 个球,然后剩下的球会重新连在一起。在没有 …

动态规划 —— 斐波那契数列模型-第 N 个泰波那契数

1. 第 N 个泰波那契数 题目链接&#xff1a; 1137. 第 N 个泰波那契数 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/n-th-tribonacci-number/ Tn3 Tn Tn1 Tn2 可以转换为 Tn Tn-3 Tn-2 Tn-1 由上图可以看出T3等于T0T1T2,T4T1T2T3以此类推后面的…

CDF时延趋势图

CDF&#xff08;Cumulative Distribution Function&#xff0c;累积分布函数&#xff09;时延趋势图是用于表示数据包时延分布情况的图形&#xff0c;常用于网络性能分析。它展示了特定时间内&#xff0c;数据包的时延达到某一值的概率&#xff0c;帮助理解时延的分布特征。 C…

特斯拉Optimus:展望智能生活新篇章

近日&#xff0c;特斯拉举办了 "WE ROBOT" 发布会&#xff0c;发布会上描绘的未来社会愿景&#xff0c;让无数人为之向往。在这场吸引全球无数媒体的直播中&#xff0c;特斯拉 Optimus 人形机器人一出场就吸引了所有观众的关注。从多家媒体现场拍摄的视频可以看出来&…

跨时钟域处理(单bit)_2024年10月21日

慢时钟域同步到快时钟域&#xff1a;打两拍 在快时钟域clk下对慢时钟域信号进行打两拍&#xff08;亚稳态概率很低&#xff09; 脉冲宽度改变&#xff0c;但不影响同步结果 快时钟域同步到慢时钟域&#xff08;两种方法&#xff09; ① 脉冲展宽同步 在快时钟域clk下对快时…

ECharts饼图-饼图纹理,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个饼图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供详…

在vue中,编写一个li标签同时使用v-for和v-if,谁的优先级更高

在 Vue 中&#xff0c;v-if 和 v-for 是两个常用的指令&#xff0c;但它们的优先级不同。当二者一起使用时&#xff0c;v-for 的优先级高于 v-if。这意味着&#xff0c;v-for 会先执行&#xff0c;即使列表中的某些元素不满足 v-if 条件&#xff0c;它们仍会被遍历和渲染。 由…

使用 PyTorch 构建 LSTM 股票价格预测模型

目录 引言准备工作1. 训练模型&#xff08;train.py&#xff09;2. 模型定义&#xff08;model.py&#xff09;3. 测试模型和可视化&#xff08;test.py&#xff09;使用说明模型调整结论 引言 在金融领域&#xff0c;股票价格预测是一个重要且具有挑战性的任务。随着深度学习…