【发布时间】:2020-08-06 15:42:20
【问题描述】:
我们将 Reactive Spring Data Repository 与 Spring WebFlux 一起使用,我对 SubscribeOn 的理解是它决定了在 SubscribeOn 之前的操作员将在哪个线程池中执行,而 PublishOn 决定订阅将在其上执行的实际线程池。然而,在下面的代码中,即使使用 PublishOn 和 SubscribeOn,代码也不会在主线程上执行,而是回退到 Cluster-nio-worker-1。
System.out.println("Current Thread :- "+Thread.currentThread().getName()); //Current Thread :- main
personRepository.findAll().log()
.map(document -> mapDocumentToSomethingElse(document)) //Current thread cluster-nio-worker-1
.subscribeOn(Schedulers.immediate())
.publishOn(Schedulers.immediate())
.subscribe(trackingevent -> System.out.println("Got Item "+item +" inside thread "+Thread.currentThread()), //Thread[cluster-nio-worker-1,5,main]
excp -> excp.printStackTrace(),
() -> System.out.println("Completed processing Thread:- "+Thread.currentThread().getName())); //cluster-nio-worker-1
还有什么 Thread[cluster-nio-worker-1,5,main] 是什么意思?为什么这些方法调用不使用主线程执行。
【问题讨论】:
标签: cassandra reactive-programming spring-webflux project-reactor spring-data-cassandra