微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Retry中如何为不同的异常配置不同的延迟值?

如何解决Spring Retry中如何为不同的异常配置不同的延迟值?

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。