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

在这里插入图片描述

在这里插入图片描述

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程
🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

前言

在外面日常开发中,服务之间的调用往往存在延迟和失败的情况。比如之前博主写的一篇【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 注解来实现重试功能。

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 实现容错重试机制并附源码】


在这里插入图片描述

评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Micro麦可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值