flatMap调用后Reactor不遵守runOn

时间:2019-07-05 17:59:16

标签: java reactive-programming spring-data-mongodb project-reactor

我正在将SpringData MongoDB Reactive Streams驱动程序与执行以下操作的代码一起使用:

reactiveMongoOperations.changeStream(changeStreamOptions, MyObject.class)
    .parallel()
    .runOn(Schedulers.newParallel("my-scheduler", 4))
    .map(ChangeStreamEvent::getBody)
    .flatMap(o -> {
        reactiveMongoOperations.findAndModify(query, update, options, MyObject.class)
    })
    .subscribe(this::process)

我希望一切都能在my-scheduler中执行。实际上发生的是flatMap操作确实在my-scheduler中执行,而我的process()方法中的代码却没有执行。

有人可以解释为什么会这样吗-这是一个错误还是我做错了什么?如何获得Flux中定义的所有操作以在同一调度程序上执行?

1 个答案:

答案 0 :(得分:0)

runOn()指定用于运行并行线程的每个“轨道”的调度程序。它不会影响订阅者。

如果要为订阅者指定调度程序,则应指定在原始Flux上(在parallel()调用之前)使用subscribeOn()