java - 带有 flatmap 和 takewhile 的 Spring reactor webclient 顺序请求

标签 java spring project-reactor spring-webflux flatmap

我想从第三方资源中检索所有页面。为此,我写了这个:

final WebClient webClient = WebClient.builder()
     .baseUrl("http://resource.com")
     .build();
Flux.fromStream(IntStream.iterate(0, i -> i + 1).boxed())
     .flatMap(i -> webClient.get()
          .uri("/data?page={page}", i)
          .retrieve()
          .bodyToMono(Page.class))
     .takeWhile(Page::isMoreAvailable)
     .flatMapIterable(Page::getData)

但它不能正常工作。 flatMap 被多次调用,它在 takeWhile 检索第一个响应之前对不同的页面执行多个请求。

如果我把它改成这样:

.map(i -> webClient.get()
        .uri("/data?page={page}", i)
        .retrieve()
        .bodyToMono(Page.class)
        .block())

效果很好。

那么,如何使用 flatMap 实现这一点?

最佳答案

好的,所以平面图处理并发

.flatMap(i -> webClient.get()
   .uri("/data?page={page}", i)
   .retrieve()
   .bodyToMono(Page.class), 1)

成功了。

关于java - 带有 flatmap 和 takewhile 的 Spring reactor webclient 顺序请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48696435/

相关文章:

java 如何从扩展线程类中获取变量值

java - 如果在 JTable 中重复,则更新值

java - 在 Spring Web 项目中使用 CSS 和 JS

events - 如何使用 Reactor 向多个消费者派发事件,并根据事件数据过滤事件?

java - 如何删除由开始/结束文档方法添加的 StaxEventItemWriter <root> 标记?

java - ElasticSearch - 打开的文件太多

java - thymeleaf 中的 if 语句

java - 将 mule 变量数据或 mule 属性(如有效负载)复制到 spring bean 属性

spring - 如何处理 Spring reactor Mono 或 Flux 中的错误?

java - react 堆项目 : Designing a reactive API