首页 > 其他分享 >guava-retrying

guava-retrying

时间:2024-04-12 14:58:58浏览次数:27  
标签:retry Retryer retrying call IOException guava

https://github.com/rholder/guava-retrying

 

##What is this?

The guava-retrying module provides a general purpose method for retrying arbitrary Java code with specific stop, retry, and exception handling capabilities that are enhanced by Guava's predicate matching.

This is a fork of the excellent RetryerBuilder code posted here by Jean-Baptiste Nizet (JB).

I've added a Gradle build for pushing it up to my little corner of Maven Central so that others can easily pull it into their existing projects with minimal effort.

It also includes exponential and Fibonacci backoff WaitStrategies that might be useful for situations where more well-behaved service polling is preferred.

guava-retrying 为Java提供了 通用的重试(stop、retry、异常处理);

Maven

    <dependency>
      <groupId>com.github.rholder</groupId>
      <artifactId>guava-retrying</artifactId>
      <version>2.0.0</version>
    </dependency>

  

Quickstart

A minimal sample of some of the functionality would look like:

Callable<Boolean> callable = new Callable<Boolean>() {
    public Boolean call() throws Exception {
        return true; // do something useful here
    }
};

Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
        .retryIfResult(Predicates.<Boolean>isNull())
        .retryIfExceptionOfType(IOException.class)
        .retryIfRuntimeException()
        .withStopStrategy(StopStrategies.stopAfterAttempt(3))
        .build();
try {
    retryer.call(callable);
} catch (RetryException e) {
    e.printStackTrace();
} catch (ExecutionException e) {
    e.printStackTrace();
}

  

This will retry whenever the result of the Callable is null, if an IOException is thrown, or if any other RuntimeException is thrown from the call() method.

It will stop after attempting to retry 3 times and throw a RetryException that contains information about the last failed attempt.

If any other Exception pops out of the call() method it's wrapped and rethrown in an ExecutionException.

call方法的 Callable的结果是nullIOException抛出 或 RuntimeException抛出 ,都会进行重试;

尝试3次后 将会stop 且 抛出最后失败尝试的RetryException;

 

Exponential Backoff

Create a Retryer that retries forever, waiting after every failed retry in increasing exponential backoff intervals until at most 5 minutes.

After 5 minutes, retry from then on in 5 minute intervals.

创建一个 永久的Retryer,在每次失败后,将会重试 在增长的指数级 间隔,最多5min;

Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
        .retryIfExceptionOfType(IOException.class)
        .retryIfRuntimeException()
        .withWaitStrategy(WaitStrategies.exponentialWait(100, 5, TimeUnit.MINUTES))
        .withStopStrategy(StopStrategies.neverStop())
        .build();

  

Fibonacci Backoff

Create a Retryer that retries forever, waiting after every failed retry in increasing Fibonacci backoff intervals until at most 2 minutes.

After 2 minutes, retry from then on in 2 minute intervals.

创建一个 永久的Retryer,在每次失败后,将会重试 在斐波那契 间隔,最多2min;

Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
        .retryIfExceptionOfType(IOException.class)
        .retryIfRuntimeException()
        .withWaitStrategy(WaitStrategies.fibonacciWait(100, 2, TimeUnit.MINUTES))
        .withStopStrategy(StopStrategies.neverStop())
        .build();

  

标签:retry,Retryer,retrying,call,IOException,guava
From: https://www.cnblogs.com/anpeiyong/p/18131205

相关文章

  • 安装Pygame过程中提示错误WARNING: Retrying…ERROR: Exception: Traceback…WARNING:
    安装Pygame过程中提示错误WARNING:Retrying…ERROR:Exception:Traceback…WARNING:Youareusingpipversion解决方案前言Pygame错误错误分析解决方案错误分析结论更新pip安装Pygame前言输入Pygame安装命令pipinstallpygame安装Pygame出错提......
  • Redis发布订阅模式解决Guava Cache本地缓存刷新问题
    为什么要用本地缓存可以加快资源访问速度,减少第三方IO延迟,也避免了网络调用的开销,将数据存储在本地jvm内存中可以减少外部系统的压力,可以将频繁访问、且更新场景较少的数据缓存起来,降低对远程服务或者数据库的请求次数,降低外部系统负载,提供系统整体的稳定性缺点:但是同时也得......
  • 重试/retrying/retry/重试控制机制
    retrying是一个Python包,用于提供一个装饰器(以及一个重试控制机制),允许你将其应用于任何函数或方法上,使得在遇到特定的异常或者返回条件不满足时自动重试。使用retrying包中的retry函数可以帮助简化代码中处理瞬时错误或不稳定操作(如网络请求)的逻辑。当你使用@retry装饰器......
  • guava中eventbus用法
    ​ google的event事件机制可以用于解耦,类似于spring的事件机制,可以同步也可以异步。定时事件(类型随意,guava调度的时候会根据对应的类型调对应的handler)packagegoogle.event;importlombok.AllArgsConstructor;importlombok.Data;@Data@AllArgsConstructorpublic......
  • Google Guava:EventBus
    EventBus是Guava中对于事件发布订阅功能的实现,是设计模式中的发布/订阅模式的一种实现方案。功能概括:通过eventBus.register注册订阅者,通过eventBus.post方法发布事件,然后根据发布事件的类型(classType),执行所有订阅者中被@Subcribe注解标记的且参数类型一致的方法,从而实现发布、订阅......
  • Guava中的多值映射Multimap的深入分析
    第1章:引言今天小黑要重点介绍的是Guava中超实用的一个工具:Multimap。Multimap这个东西,其实可以看作是Map的一个加强版。在Java标准库中,一个key只能对应一个value,但在实际开发中,我们经常会遇到一个key对应多个value的情况,这时候就有点力不从心了。比如,假设咱们要管理一个学校的......
  • Guava的TypeToken在泛型编程中的应用
    第1章:引言在Java世界里,泛型是个相当棒的概念,能让代码更加灵活和类型安全。但是,泛型也带来了一些挑战,特别是当涉及到类型擦除时。这就是TypeToken大显身手的时候!作为Java程序员的咱们,都知道泛型可以让代码更加通用,但同时也可能会导致一些类型信息在运行时丢失,这就是所谓的类型擦......
  • Guava自加载缓存LoadingCache使用指南
    第1章:引言大家好,我是小黑,今天我们来聊聊缓存。在Java世界里,高效的缓存机制对于提升应用性能、降低数据库负担至关重要。想象一下,如果每次数据请求都要跑到数据库里取,那服务器岂不是要累趴了?这时候,缓存就显得尤为重要了。那么,怎么实现一个既高效又好用的缓存呢?别急,咱们今天的主......
  • Java异常处理神器:Guava Throwables类
    第一章:Guava库简介Guava由Google开发,它提供了大量的核心Java库,例如:集合、缓存、原生类型支持、并发库、通用注解、字符串处理和I/O操作等。这些功能在日常的Java开发中超级常用,而且Guava的设计哲学是简洁高效,这让咱们的代码不仅更加优雅,而且更加易于维护和阅读。尤其是在异常处......
  • Google Guava:EventBus
    EventBus是Guava中对于事件发布订阅功能的实现,是设计模式中的发布/订阅模式的一种实现方案。功能概括:通过eventBus.register注册订阅者,通过eventBus.post方法发布事件,然后根据发布事件的类型(classType),执行所有订阅者中被@Subcribe注解标记的且参数类型一致的方法,从而实现发布、......