问题描述
我想在我的 WebClient 调用中添加模拟延迟的代码,以便我可以确保我的超时/重试/等工作正常。
由于 WebClient 是响应式的并使用线程池,因此 Thread.sleep
似乎会以 WebClient 在实际使用中通常不会被阻塞的方式阻塞线程。
有没有更好的方法来模拟这种延迟?
(灵感来自Tkinter: AttributeError: NoneType object has no attribute
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));
};