Я загружаю большой файл с помощью 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();
Любое понимание того, почему эта ошибка может произойти, будет оценено.