【发布时间】:2019-07-05 17:59:16
【问题描述】:
我正在使用 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 中定义的所有操作在同一个调度程序上执行?
【问题讨论】:
-
process在哪个线程中执行?难道是mongo驱动改变了findAndModify中的线程? -
@SimonBaslé,
process方法在通用线程(“Thread-nn”)中执行。如果我在flatMap()调用之后添加另一个runOn(),那么process将在my-scheduler中执行。不过,我认为我不需要这样做。
标签: java reactive-programming spring-data-mongodb project-reactor