gpt4 book ai didi

java - Spring的Retryable或RetryTemplate可以使用Retry-After header 进行动态退避吗?

转载 作者:行者123 更新时间:2023-11-30 01:44:42 25 4
gpt4 key购买 nike

我可以让Spring的@Retryable或@RetryTemplate使用HTTP 503“服务不可用”响应中的Retry-After header 中收到的数字作为下一个延迟重试迭代?

例如:

@Retryable(maxAttempts = 42,
backoff = @Backoff(delay = 1000),
value = NotYetReady.class)
public boolean isExternalComponentReadyToUse() throws NotYetReady {
ResponseEntity<String> response = callRestEndpointToCheckReadiness();
if (!response.getStatus().is2xxSuccessful()) {
int retryAfterInSeconds = response.getHeaders().get("Retry-After");
// tell @Retryable to run next attempt after retryAfterInSeconds?
throw new NotYetReady();
}
return true;
}

我们的 Java 应用程序依赖于需要几分钟才能启动的外部组件。该组件提供了一个 REST 端点来检查准备情况。如果端点可以估计剩余设置将花费多长时间,则它会发送回带有 Retry-After header 的 503

最佳答案

一种方法是将值存储在静态 ThreadLocal 中(例如 MyHolder.setDelay(...))并使用 delayExpression@Backoff() 中检索该值。

类似于 “T(com.foo.MyHolder).getDelay()”

您需要将 RetryOperationsInterceptor 作为 @Bean 与自定义 BackoffPolicy 连接起来,并在 @Retryable 中引用它.interceptor 属性。

关于java - Spring的Retryable或RetryTemplate可以使用Retry-After header 进行动态退避吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58559733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com