码迷,mamicode.com
首页 > 其他好文 > 详细

guava-retrying 源码解析(停止策略详解)

时间:2019-02-23 20:37:06      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:停止   静态内部类   rtt   failed   策略   抽象方法   pts   str   静态   

一、停止策略相关类

1、停止策略接口:StopStrategy接口,只有一个抽象方法

// 是否应该停止重试。不同的停止策略有不同的实现。
boolean
shouldStop(Attempt failedAttempt);

2、停止策略工厂类:StopStrategies类

  这是一个常量类、工厂类,用于创建停止策略对象。这个工厂类里面定义了三种停止策略,都是常量静态内部类。

  该工厂类是创建停止策略的唯一途径。

二、详解三种停止策略

1、从不停止策略:NeverStopStrategy

  使用这种策略,会进行无限次的重试。

2、指定重试次数的策略:StopAfterAttemptStrategy

  这种策略,构造方法里需要传入一个int型的参数,这个参数决定了重试的次数。

3、通过比较延迟时间决定是否重试:StopAfterDelayStrategy

  通过“第一次尝试延迟时间”和创建该策略对象时传入的延迟时间参数进行比较,如代码中的 shouldStop() 方法所示。

  @Test
    public void testStopAfterDelayWithTimeUnit() {
        assertFalse(StopStrategies.stopAfterDelay(1, TimeUnit.SECONDS).shouldStop(failedAttempt(2, 999L)));
        assertTrue(StopStrategies.stopAfterDelay(1, TimeUnit.SECONDS).shouldStop(failedAttempt(2, 1000L)));
        assertTrue(StopStrategies.stopAfterDelay(1, TimeUnit.SECONDS).shouldStop(failedAttempt(2, 1001L)));
    }

    public Attempt<Boolean> failedAttempt(long attemptNumber, long delaySinceFirstAttempt) {
        return new Retryer.ExceptionAttempt<Boolean>(new RuntimeException(), attemptNumber, delaySinceFirstAttempt);
    }

  // --------源码-------
 
  @Override
   public boolean shouldStop(Attempt failedAttempt) {
 return failedAttempt.getDelaySinceFirstAttempt() >= maxDelay; 
   }

 

guava-retrying 源码解析(停止策略详解)

标签:停止   静态内部类   rtt   failed   策略   抽象方法   pts   str   静态   

原文地址:https://www.cnblogs.com/shenqidu/p/10420181.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!