带有flatMap的Flux subscriptionOn(elastic(),true)不在不同线程上执行

时间:2019-11-12 17:37:35

标签: reactive-programming spring-webflux

想要在不同线程上异步执行通量中的元素。 但它不会在不同的线程上执行它们。我想念什么吗?

下面是代码。

public Mono<Map<Object, Object>> execute(List<Empolyee> empolyeeList) {


        return Flux.fromIterable(empolyeeList).subscribeOn(elastic(), true).flatMap(empolyee -> {           

            return empolyeeService.getDepts(empolyee).flatMap(result -> {

             // ---
             // ---
             // ---

                return Mono.just(result);
            });

        }).collectMap(result -> result.getName().trim(), result -> fieldResult.getValue());
} 

2 个答案:

答案 0 :(得分:1)

摘自文档

  

subscribeOn适用于订阅过程,但向后   链被构建。因此,无论放置在哪里   链中的subscribeOn始终会影响源的上下文   发射。

它不起作用,如您所想。它适用于有人订阅的情况。他们的整个请求将放在自己的脚上。因此,绝对保证没有两个请求会在同一线程上结束。

The subscribeOn method

答案 1 :(得分:0)

将通量设为平行通量,并使用 runOn(elastic())。其工作正常

//Making flux as parallel flux, we can also use ParallelFlux instead of below
Flux.fromIterable(empolyeeList).parallel()

//running on elastic scheduler
.runOn(elastic()).flatMap(empolyee -> {

}