guava-retrying 提供了WaitStrategy接口,用来控制2次重试的时间间隔,这个接口与StopStrategy有点类似。内置的等待策略在WaitStrategies中定义。

WaitStrategies.noWait() 失败后立刻重试,没有等待时间。

WaitStrategies.fixedWait(1, TimeUnit.SECONDS) 间隔固定时间之后重试,比如每隔1s重试一次。

WaitStrategies.randomWait(3, TimeUnit.SECONDS) 间隔随机时间后重试,比如间隔0~3中随机时间后重试。

WaitStrategies.randomWait(2, TimeUnit.SECONDS, 5, TimeUnit.SECONDS) 最小值,最大值之间的随机时间。

WaitStrategies.incrementingWait增量重试,重试的次数越多,等待时间间隔越长。incrementingWait需要传递2个参数,一个是initialSleepTime(第一次到第二次尝试的间隔),一个是increment(每增加一次尝试,需要增加的时间间隔)。第一次尝试是不需要等待的,因为 guava-retrying 中的第一次尝试,对应正常的第一次调用。从第二次重试开始,第n-1次到n次间隔是:initialSleepTime + (n-2)*increment

  1. WaitStrategies.incrementingWait(0, TimeUnit.SECONDS, 0, TimeUnit.SECONDS)等价于 WaitStrategies.noWait()
  2. WaitStrategies.incrementingWait(1, TimeUnit.SECONDS, 0, TimeUnit.SECONDS)等价于WaitStrategies.fixedWait(1, TimeUnit.SECONDS)
  3. WaitStrategies.incrementingWait(0, TimeUnit.SECONDS, 1, TimeUnit.SECONDS)等价于WaitStrategies.fixedWait(1, TimeUnit.SECONDS)
  4. WaitStrategies.incrementingWait(1, TimeUnit.SECONDS, 1, TimeUnit.SECONDS)

WaitStrategies.fibonacciWait()按照斐波那契数列等待。fibonacciWait(long multiplier,long maximumTime,TimeUnit maximumTimeUnit)multiplier单位固定是msmaximumTime最大等待时间。n=1的时候,是无需等待的。当n>=2的时候,开始符合斐波那契数列。

WaitStrategies.exponentialWait按照指数递增(2的n次方)来等待,各个参数含义与fibonacciWait相同。

WaitStrategies.exceptionWait根据抛出的异常来决定等待的时间长短,没有什么实际用处,不过作为学习还是可以了解下,说不定将来能排上用场呢。


参考资料:

guava-retrying重试工具库: 隔多长时间重试_aitangyong的博客-CSDN博客_waitstrategies.exponentialwait

标签: none

评论已关闭