我正在使用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();
对于为什么会发生此错误的任何见解,将不胜感激。