如何使用SpringWebClient正确模拟延迟



我想添加一些代码来模拟WebClient调用中的延迟,这样我就可以确保超时/重试等正常工作。

由于WebClient是被动的并且使用线程池,因此Thread.sleep似乎会以WebClient在实际使用中通常不会被阻止的方式来阻止线程。

有没有更好的方法来模拟这种延迟?

(灵感来自https://github.com/fletchgqc/chaos-monkey-spring-boot/pull/2/files#diff-7f7c533cc2b344aa04484a17d0eff0da404a5ab3cc55a47bba9ed019fba82e3R9

public class LatencyInducingRequestInterceptor implements ClientHttpRequestInterceptor {
public ClientHttpResponse intercept(
HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
ClientHttpResponse response = execution.execute(request, body);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// do nothing
}
return response;
}
}

答案是使用delayElement(我上面发布的代码是针对RestTemplate的,这解释了为什么使用Thread.sleep

ExchangeFilterFunction latencyAddingFilterFunction =
(clientRequest, nextFilter) -> {
return nextFilter.exchange(clientRequest).delayElement(Duration.ofSeconds(2));
};

最新更新