如何使用带有多个异常且每个异常具有不同超时的spring注释@Retryable?
我们有一个对外部api的restCall,它可能引发2个异常(ShortDelayException,NeedLongerDelayException)。
print(''.join(array))
第一个异常需要进行快速重试,因为它用于身份验证,第二个异常需要等待至少3分钟,因为在3分钟后会释放API服务端可能发生的锁定。
我们目前有2个“ hacky”解决方案,但我们正在寻找一种优雅的解决方案。
棘手的解决方案1- 捕获NeedLongerDelayException并添加3m的睡眠,然后再将其扔回去。
棘手的解决方案2- 在初始延迟1秒后,我们将延迟乘以3分钟,然后将maxDelay设置为3m
@Retryable(value = {ShortDelayException.class, NeedLongerDelayException.class}, maxAttemptsExpression = "${myapp.retry.max:3}", backoff = @Backoff(delayExpression = "${myapp.retry.delay:1000}"))
public List<String> getMovieNameList(String accountId, int days, int limit, int offsetNb) {
该问题还有其他解决方案吗? Spring是否允许在异常之间使用多个退避?