Spring reactor webclient 使用 flatmap 和 takewhile 顺序请求
Spring reactor webclient sequential requests with flatmap and takewhile
我想从第三方资源中检索所有页面。为此,我写了这个:
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 处理并发
.flatMap(i -> webClient.get()
.uri("/data?page={page}", i)
.retrieve()
.bodyToMono(Page.class), 1)
成功了。
我想从第三方资源中检索所有页面。为此,我写了这个:
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 处理并发
.flatMap(i -> webClient.get()
.uri("/data?page={page}", i)
.retrieve()
.bodyToMono(Page.class), 1)
成功了。