问题描述
@Retryable(value = {SocketTimeoutException.class,AmazonServiceException.class},backoff = @Backoff(delayExpression = "${retry.delay:10000}"),maxAttemptsExpression = "${retry.max-attempts:4}")
对于SocketTimeoutException,我想将延迟设置为10000,但对于AmazonServiceException,我想将其设置为100。 有没有办法做到这一点?
谢谢
解决方法
我目前面临类似的问题,我找不到优雅的解决方案。以下是我认为可能对您有所帮助的解决方法:
@Retryable(value = {SocketTimeoutException.class},backoff = @Backoff(delayExpression = "${retry.delay:10000}"),maxAttemptsExpression = "${retry.max-attempts:4}")
void function1(){
//do actual work here
}
@Retryable(value = {AmazonServiceException.class},backoff = @Backoff(delayExpression = "${retry.delay:100}"),maxAttemptsExpression = "${retry.max-attempts:4}")
void function2(){
function1(); // call function1
}
调用 function2
来执行您的逻辑。这里的主要思想是从第一个函数中调用另一个函数,这两个函数配置了不同的 BackOff 延迟。
在某些情况下,这会在最大尝试值方面产生一些问题。具体来说,在最坏的情况下,总共可以尝试 8 次重试(4 + 4)。