Java 使用groupBy的Flux并行串行执行
假设我有这个:Java 使用groupBy的Flux并行串行执行,java,project-reactor,Java,Project Reactor,假设我有这个: Flux<GroupedFlux<Integer, Integer>> intsGrouped = Flux.range(0, 12) .groupBy(i -> i % 3); 我试过了,但它不是我想要的: Flux.range(0, 12) .groupBy(i -> i % 3) .flatMap(g -> g.flatMap(i -> getFromService(g.key(), i))) 这是同时为
Flux<GroupedFlux<Integer, Integer>> intsGrouped = Flux.range(0, 12)
.groupBy(i -> i % 3);
我试过了,但它不是我想要的:
Flux.range(0, 12)
.groupBy(i -> i % 3)
.flatMap(g -> g.flatMap(i -> getFromService(g.key(), i)))
这是同时为所有INT并行调用服务。如何继续?使用或代替内部.flatMap
如果希望在每个组内顺序执行(即在每个组内一次只能订阅一个getFromService
),请使用.concatMap
,如下所示:
流量范围(0,12)
.groupBy(i->i%3)
.flatMap(g->g.concatMap(i->getFromService(g.key(),i)))
如果组内并行执行正常,但您只关心序列的发出顺序,则使用flatMapSequential
,如下所示:
流量范围(0,12)
.groupBy(i->i%3)
.flatMap(g->g.flatMap顺序(i->getFromService(g.key(),i)))
另一个选项是使用.flatMap
,并将并发性
参数设置为1
,但我建议使用上述参数之一
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)))