想要在不同线程上异步执行通量中的元素。 但它不会在不同的线程上执行它们。我想念什么吗?
下面是代码。
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());
}
答案 0 :(得分:1)
摘自文档
subscribeOn适用于订阅过程,但向后 链被构建。因此,无论放置在哪里 链中的subscribeOn始终会影响源的上下文 发射。
它不起作用,如您所想。它适用于有人订阅的情况。他们的整个请求将放在自己的脚上。因此,绝对保证没有两个请求会在同一线程上结束。
答案 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 -> {
}