Spring 重试中的增量线性退避
Incremental linear backoff in Spring Retry
我在我想重试的方法中使用以下注释:
@Retryable(maxAttempts = 5, backoff = @Backoff(delay = 1000))
private boolean myMethod() {
...
}
这次重试按预期进行,但未显示指数延迟。在某些情况下,我想使用线性增量重试而不是指数重试(因此首先等待 1 秒,然后等待 2 秒、3 秒等)。听起来我需要 delayExpresion
,但我不熟悉 SpEL 不知道在这里使用什么。我试过了:
@Retryable(maxAttempts = 5, backoff = @Backoff(delay = 1000, delayExpression = "#{delay + 1000}"))
我想做的事情(延迟增加 1000)可以用 SpEL 实现吗?或者,我的线性重试方法是否正确?
这是不可能通过注释实现的。
Retryable
有一个 interceptor()
选项:
/**
* Retry interceptor bean name to be applied for retryable method. Is mutually
* exclusive with other attributes.
* @return the retry interceptor bean name
*/
String interceptor() default "";
因此,您应该考虑通过 RetryInterceptorBuilder
构建一个 RetryOperationsInterceptor
bean,并向其中注入具有所需线性逻辑的自定义 BackOffPolicy
。
我在我想重试的方法中使用以下注释:
@Retryable(maxAttempts = 5, backoff = @Backoff(delay = 1000))
private boolean myMethod() {
...
}
这次重试按预期进行,但未显示指数延迟。在某些情况下,我想使用线性增量重试而不是指数重试(因此首先等待 1 秒,然后等待 2 秒、3 秒等)。听起来我需要 delayExpresion
,但我不熟悉 SpEL 不知道在这里使用什么。我试过了:
@Retryable(maxAttempts = 5, backoff = @Backoff(delay = 1000, delayExpression = "#{delay + 1000}"))
我想做的事情(延迟增加 1000)可以用 SpEL 实现吗?或者,我的线性重试方法是否正确?
这是不可能通过注释实现的。
Retryable
有一个 interceptor()
选项:
/**
* Retry interceptor bean name to be applied for retryable method. Is mutually
* exclusive with other attributes.
* @return the retry interceptor bean name
*/
String interceptor() default "";
因此,您应该考虑通过 RetryInterceptorBuilder
构建一个 RetryOperationsInterceptor
bean,并向其中注入具有所需线性逻辑的自定义 BackOffPolicy
。