Как правильно имитировать задержку с помощью Spring WebClient

Я хочу добавить код, который имитировал бы задержку в моих вызовах WebClient, чтобы я мог убедиться, что мои тайм-ауты / повторные попытки / и т. Д. Работают правильно.

Поскольку WebClient является реактивным и использует пул потоков, кажется, что Thread.sleep будет блокировать поток таким образом, что WebClient обычно не блокируется при реальном использовании.

Есть ли лучший способ имитировать эту задержку?

(На основе https://github.com/fletchgqc/chaos-monkey-spring-boot/pull/2/files#diff-7f7c533cc2b344aa04848a17d0eff0cda404a5ab3cc55a47bba9ed019fba82e3R9

      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));
      };
Другие вопросы по тегам