我正在将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
中定义的所有操作以在同一调度程序上执行?
答案 0 :(得分:0)
runOn()
指定用于运行并行线程的每个“轨道”的调度程序。它不会影响订阅者。
如果要为订阅者指定调度程序,则应指定在原始Flux
上(在parallel()
调用之前)使用subscribeOn()
。