如何在春季重试中为不同的异常配置不同的延迟值


@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(。

最新更新