使用groupBy进行Flux并行串行执行

问题描述 投票:0回答:1

说我有这个:

Flux<GroupedFlux<Integer, Integer>> intsGrouped = Flux.range(0, 12)
   .groupBy(i -> i % 3);

并说我有一个方法:

Mono<Integer> getFromService(Integer i);

我想为每个组并行调用getFromService,但要确保每个组中的调用都是串行的。

对于上面的示例,它将是具有这些输入值的三个并行流:

stream 1: 0 -> 3 -> 6 -> 9
stream 2: 1 -> 4 -> 7 -> 10
stream 3: 2 -> 5 -> 8 -> 11

我试过这个,但它不是我想要的:

Flux.range(0, 12)
   .groupBy(i -> i % 3)
   .flatMap(g -> g.flatMap(i -> getFromService(g.key(), i)))

这是一次性为所有int并行调用服务。我该怎么办?

java project-reactor
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.