Sprong Boot学习|使用 guava-retrying 实现重试

背景

后端业务系统可能会在接口调用失败、网络拥塞超时、任务执行失败、系统错误等异常情况出现的时候进行重试操作,然而不同的场景对于重试的延迟间隔,频次等会有不同的要求,如果自己编排重试代码会比较繁琐,使用 guava-retrying 可以帮我们灵活实现重试机制。

guava-retrying简介

guava-retrying 是一个线程安全的 Java 重试类库,提供了一种通用方法去处理任意需要重试的代码,可以方便灵活地控制重试次数、重试时机、重试频率、停止时机等,并具有异常处理功能

使用

1、dependency

复制代码
<dependency>
  <groupId>com.github.rholder</groupId>
  <artifactId>guava-retrying</artifactId>
  <version>2.0.0</version>
</dependency>

2、定义重试器

两个重试器例子

重试器 retryer1: 失败后一直重试,以菲波纳耶数列设置重试等待间隔,直到间隔为1000s,然后以1000s为间隔重不断试

java 复制代码
private Retryer<Void> retryer1 = RetryerBuilder.<Void>newBuilder()
    .retryIfExceptionOfType(Throwable.class) // 如果出现Throwable异常则重试
    .withWaitStrategy(WaitStrategies.fibonacciWait(100, TimeUnit.SECONDS)) // 等待重试策略
    .withStopStrategy(StopStrategies.neverStop()) // 停止策略
    .build();

重试器 retryer2:重试3次后抛出异常,每次重试间隔等待300毫秒

java 复制代码
    private Retryer<Void> retryer2 = RetryerBuilder.<Void>newBuilder()
            .retryIfExceptionOfType(Throwable.class)
            .withWaitStrategy(WaitStrategies.fixedWait(300, TimeUnit.MILLISECONDS))
            .withStopStrategy(StopStrategies.stopAfterAttempt(3))
            .build();

参数定义

  • retryIfExceptionOfType():重试条件,另外还有 retryIfResult,retryIfRuntimeException
  • withWaitStrategy:重试等待策略
  • withStopStrategy:重试停止策略
  • 阻塞策略、超时限制、注册重试监听器(上述简易重试器未涉及到)

3、使用

复制代码
retryer.call(() -> {
            log.info("重试方法被调用");
            if (1 == 1) {
                throw new RuntimeException("重试错误");
            }
            return null;
        });
相关推荐
星恒随风几秒前
C++ 模板初阶:从泛型编程、函数模板到类模板,一篇打通基础概念
开发语言·c++·笔记·学习
踏着七彩祥云的小丑5 分钟前
嵌入式测试学习第35 天:蓝牙、WiFi嵌入式设备测试基础概念
单片机·嵌入式硬件·学习
承渊政道22 分钟前
【MySQL数据库学习】(MySQL内置函数)
数据库·学习·mysql·ubuntu·bash·数据库开发·数据库系统
都说名字长不会被发现24 分钟前
Spring Boot Starter 中间件账号密码加密方案设计与实现
java·spring boot·后端·中间件
力学与人工智能41 分钟前
论文分享 | 优化离散损失求解反问题:无需神经网络的快速精确学习
人工智能·神经网络·学习·优化·离散损失·反问题求解·快速准确学习
V搜xhliang02469 小时前
AI智能体的数据安全与合规实践
人工智能·学习·数据分析·自动化·ai编程
无敌的牛10 小时前
redis学习过程
数据库·redis·学习
旅僧12 小时前
Π环境部署(运行 且 无理论讲解)
学习
jushi899912 小时前
Lucas Chess R国际象棋、中国象棋、日本将棋、五子棋训练学习工具游戏软件
学习
自传.12 小时前
尚硅谷 Vibe Coding|第一章 AI 编程基础理论 学习笔记
笔记·学习·尚硅谷·vibe coding