重试神器Retryer

 一、使用组件首先在项目中引入maven依赖:

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

下面通过一个例子,来看如何使用该组件:

// 1.创建重试器对象
 private final static Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
   .retryIfResult(Predicates.<Boolean>isNull())// 1.1当重试的方法返回null时候进行重试
   .retryIfExceptionOfType(IOException.class)// 1.2当重试方法抛出IOException类型异常时候进行重试
   .withStopStrategy(StopStrategies.stopAfterAttempt(3))// 1.3尝试执行三次(也就是重试2次)
   .withWaitStrategy(WaitStrategies.fixedWait(2, TimeUnit.SECONDS))//1.4重试间隔
   .build();

 public static void main(String[] args) {

  // 2需要重试的方法
  Callable<Boolean> callable = new Callable<Boolean>() {
   public Boolean call() throws Exception {

    // dosomthing

    return null; // do something useful here
   }
  };

  // 3.添加需要重试方法到执行器
  try {
   Boolean result = retryer.call(callable);
   System.out.println(result);
  } catch (RetryException e) {
   e.printStackTrace();
  } catch (ExecutionException e) {
   e.printStackTrace();
  }
 }

代码1.4设置重试间隔,通过方法 withWaitStrategy,设置当重试方法执行失败后,下一次重试什么时候开始,一般策略有等待多少时间后,进行下一次重试,常用策略如下:

  • WaitStrategies.fixedWait(2, TimeUnit.SECONDS) 等待固定多少时间进行重试
  • WaitStrategies.incrementingWait(3, TimeUnit.SECONDS,1,TimeUnit.SECONDS) 每次重试等待时间添加个增量
  • WaitStrategies.fibonacciWait(1000,10,TimeUnit.SECONDS) 斐波那契数列方式设置重试间隔。

Retryer其是线程安全的。这是因为Retryer内部与重试相关的变量是在第一次添加任务时候,通过new了与任务相关的ResultAttempt进行隔离了,每个重试任务有自己的ResultAttempt变量来记录重试信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值