Spring WebClient bodyToFlux поддержка противодавления - PullRequest
0 голосов
/ 03 октября 2019

Я загружаю большой файл с помощью Spring WebClient. Файл не помещается в память, поэтому я использую метод bodyToFlux, который возвращает строки файла одну за другой.

Поддерживает ли этот метод механизм противодавления? Он загружает в память столько данных, сколько может обработать потребитель?

Я спрашиваю, потому что иногда я вижу ошибку при загрузке: reactor.core.Exceptions$OverflowException: Could not emit buffer due to lack of requests

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

Мой код выглядит так:

WebClient webClient = WebClient.builder().build();

webClient.get()
         .uri("...") // url of large file
         .retrieve()
         .bodyToFlux(String.class)
         .log()
         .buffer(4000)
         .doOnNext(System.out::println)
         .flatMap(x -> Mono.delay(Duration.ofMillis(3000)).thenReturn(x)) // some slow processing
         .blockLast();

Любое понимание того, почему эта ошибка может произойти, будет оценено.

...