Spring WebClient bodyToFlux背压支持

时间:2019-10-03 17:40:32

标签: java spring-webflux project-reactor spring-webclient

我正在使用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();

对于为什么会发生此错误的任何见解,将不胜感激。

0 个答案:

没有答案