Как правильно имитировать задержку с помощью Spring WebClient
Я хочу добавить код, который имитировал бы задержку в моих вызовах WebClient, чтобы я мог убедиться, что мои тайм-ауты / повторные попытки / и т. Д. Работают правильно.
Поскольку WebClient является реактивным и использует пул потоков, кажется, что
Thread.sleep
будет блокировать поток таким образом, что WebClient обычно не блокируется при реальном использовании.
Есть ли лучший способ имитировать эту задержку?
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;
}
}
1 ответ
Ответ - использовать
delayElement
(Код, который я опубликовал выше, был для
RestTemplate
, это объясняет, почему
Thread.sleep
использовался.
ExchangeFilterFunction latencyAddingFilterFunction =
(clientRequest, nextFilter) -> {
return nextFilter.exchange(clientRequest).delayElement(Duration.ofSeconds(2));
};