Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用groupBy的Flux并行串行执行_Java_Project Reactor - Fatal编程技术网

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)))