我一直在学习 Spring Webflux 和反应式编程,但遇到了一个问题,我正在尝试使用 Spring Webclient 解决重试逻辑。我创建了一个客户端并成功调用了一个返回一些 JSON 数据的外部 Web 服务 GET 端点。
当外部服务以503 - Service Unavailable状态响应时,响应包含一个Retry-After标头,其中包含一个值,该值指示在重试请求之前我应该等待多长时间。我想在 Spring Webflux/Reactor 中找到一种方法来告诉 webClient 在 X 周期后重试它的请求,其中 X 是现在和我从响应标头中解析出的 DateTime 之间的差异。
public <T> Mono<T> get(final String url, Class<T> clazz) {
return webClient
.get().uri(url)
.retrieve()
.bodyToMono(clazz);
}
Run Code Online (Sandbox Code Playgroud)
我使用构建器创建了webClient上述方法中使用的变量,并将其作为实例变量存储在类中。
webClientBuilder = WebClient.builder();
webClientBuilder.codecs(clientCodecConfigurer -> {
clientCodecConfigurer.defaultCodecs();
clientCodecConfigurer.customCodecs().register(new Jackson2JsonDecoder());
clientCodecConfigurer.customCodecs().register(new Jackson2JsonEncoder());
});
webClient = webClientBuilder.build();
Run Code Online (Sandbox Code Playgroud)
我试图理解和使用该类的retryWhen方法Retry,但不知道我是否可以访问或传递那里的响应标头值。
public <T> …Run Code Online (Sandbox Code Playgroud) java project-reactor spring-webflux retrywhen spring-webclient