guava-retrying重试框架(一学就会系列)

本文介绍了如何在SpringBoot项目中使用Guava Retrying框架进行重试操作。从创建项目、添加依赖,到编写Callable对象实现业务,配置重试器,可选地定制监听器,详细阐述了Guava Retrying的灵活性和实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

目前最流行的二大重试框架,其中一个是spring-retry,另一个就是谷歌的guava-retrying。

Guava retryer工具与spring-retry类似,Guava Retryer也是线程安全的。但是Guava retryer有更优的策略定义,在支持重试次数和重试频度的基础上,还支持特定异常时触发重试 和 callable自定义返回值来判断是否需要重试,让重试功能有更多的灵活性。

第一步:创建SpringBoot项目,添加依赖

<!--        guava-retrying重试框架-->
        <dependency>
            <groupId>com.github.rholder</groupId>
            <artifactId>guava-retrying</artifactId>
            <version>2.0.0</version>
        </dependency>
<!--        用到了slf4j打印日志-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
<!--        使用了单元测试类-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artif
Guava Retrying 并不是个官方 Guava 库的部分,而是个独立的第三方库,通常被称为 **Retryer** 或者类似的名称。它受到 Google Guava 的启发并扩展了些功能来支持重试机制。 以下是关于如何找到该库的相关信息: ### 官方网站链接 可以访问以下地址获取更多有关 Guava Retrying 的文档和支持信息: - [GitHub 上的 Guava Retryer](https://github.com/rholder/guava-retrying)[^1] 此项目由 Robert Holden 开发,并提供了灵活的方式来实现方法调用的自动重试逻辑。 ### 使用示例 下面是段简单的代码展示如何配置和使用 `Retryer` 来执行带重试的操作。 ```java import com.github.rholder.retry.*; import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; public class RetryExample { public static void main(String[] args) throws Exception { Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder() .retryIfResult(result -> !result) .withWaitStrategy(WaitStrategies.fixedWait(1, TimeUnit.SECONDS)) .withStopStrategy(StopStrategies.afterAttempt(3)) .build(); Callable<Boolean> task = () -> performTask(); Boolean result = retryer.call(task); System.out.println("Operation succeeded: " + result); } private static Boolean performTask() { // Simulate a failing operation that eventually succeeds. System.out.println("Attempting task..."); return Math.random() > 0.7; // Random success after some attempts. } } ``` 上述代码展示了如何通过自定义条件设置重试策略以及等待时间间隔[^1]。 ### 注意事项 需要注意的是,在实际生产环境中应用此类工具时,应仔细评估失败场景下的行为模式,以防止不必要的资源消耗或者服务雪崩效应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值