Spring 重试中的 UniformRandom BackOffPolicy 与 ExponentialBackOffPolicy

问题描述

我知道背后的逻辑:

弹簧指数随机退避

wait time = delay * (1.0D + random.nextFloat() * (multiplier - 1.0D))
if(delay > maxDelay){
    delay = maxDelay
}else{ 
    delay = delay * multiplier
}

如果您将延迟设置为 1000 毫秒,将 maxDelay 设置为 5000 毫秒并将乘数设置为 2,则重试时间将类似于以下 4 次尝试:

重试 1 — 1605

重试 2 — 2760

重试 3 — 7968

重试 4 — 14996

Spring Uniform Random Backoff

if(delay > maxDelay){
    wait time = delay
}else{ 
    wait time = delay + random.nextInt() * (maxDelay - delay))
}

如果您将延迟设置为 100 毫秒,将 maxDelay 设置为 6000 毫秒,则重试时间将类似于以下 4 次尝试:

重试 1–2394

重试 2–4434

重试 3–1788

重试 4–5748

此外,我们不能在 Uniform Random Backoff 中设置乘数变量,因为这将根据 Spring 的 AnnotationAwareRetryOperationsInterceptor 的运行方式实现指数随机退避策略。 我仍然无法理解其中的区别。

参考:https://medium.com/@vmoulds01/springboot-retry-random-backoff-136f41a3211a

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)