问题描述
我知道背后的逻辑:
弹簧指数随机退避
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 (将#修改为@)