Retryer 创建工具 -- RetryerBuilder

2018-03-01 21:00:41   最后更新: 2018-03-01 23:46:41   访问数量:146




上一篇日志中,我们介绍了 Retryer 类

guava 重试工具库 -- Retryer

由于 Retryer 类构造方法参数较多,较为复杂,而使用 RetryerBuilder 要更加简洁明了,也是更加常用的方式

 

RetryerBuilder 的构造方法是 private 的,这也意味着我们不能通过 new 的方式直接创建 RetryerBuilder 对象

RetryerBuilder 提供了一个 static 方法:

public static <V> RetryerBuilder<V> newBuilder()

 

 

通过:

RetryerBuilder retryer = RetryerBuilder.newBuilder();

 

就可以创建一个 RetryerBuilder 了

 

通过 RetryerBuilder 提供的 build 方法就可以创建出一个 Retryer 对象了:

public Retryer<V> build()

 

 

Retryer 的构造方法的参数传递了所需要的所有重试策略,我们这里不做介绍

而 RetryerBuilder 提供了一系列方法用来指定具体的重试策略

所有的策略方法均会返回 this 对象,所以可以通过 . 连接多个策略

 

retryIfException

public RetryerBuilder<V> retryIfException()

 

只要抛出异常就进行重试

 

retryIfRuntimeException

public RetryerBuilder<V> retryIfRuntimeException()

 

只要抛出 RuntimeException

 

retryIfExceptionOfType

public RetryerBuilder<V> retryIfExceptionOfType(@Nonnull Class<? extends Throwable> exceptionClass)

 

抛出参数指定的异常类型才会重试

 

retryIfException

public RetryerBuilder<V> retryIfException(@Nonnull Predicate<Throwable> exceptionPredicate)

 

上一篇日志中介绍了 guava 提供的断言接口 Predicate 以及异常强大的断言工厂 Predicates,可以实现非常复杂的条件构造

guava 重试工具库 -- Retryer

这个方法就是以 Predicate 对象为参数的实现判断指定异常进行重试

 

retryIfResult

public RetryerBuilder<V> retryIfResult(@Nonnull Predicate<V> resultPredicate)

 

与 retryIfException 方法一样,这个方法也是以 Predicate 对象为参数的,他实现了通过返回值作为重试条件的策略

 

同样的,RetryerBuilder 也支持我们上一篇日志中所介绍的超时时长策略、停止重试策略、重试时间间隔策略、线程阻塞策略、拒绝断言策略、重试监听者

public RetryerBuilder<V> withRetryListener(@Nonnull RetryListener listener); public RetryerBuilder<V> withWaitStrategy(@Nonnull WaitStrategy waitStrategy); public RetryerBuilder<V> withStopStrategy(@Nonnull StopStrategy stopStrategy); public RetryerBuilder<V> withBlockStrategy(@Nonnull BlockStrategy blockStrategy); public RetryerBuilder<V> withAttemptTimeLimiter(@Nonnull AttemptTimeLimiter<V> attemptTimeLimiter);

 

 






读书笔记      技术帖      龙潭书斋      技术分享      java      guava      retryer      重试      retryerbuilder      参数构造      策略     


1#duchao: (回复)2018-04-23 11:07:07

通过这两篇,我了解到了retry的使用,但相关原理 ,还需要博主show the code ,dayday up

京ICP备15018585号