I'm testing how reactor works, created such code which is quite similar to what can be found in reactor documentation.
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Scheduler;
import reactor.core.scheduler.Schedulers;
@SpringBootTest
@RunWith(SpringRunner.class)
public class ReactorApplicationTests {
@Test
public void publishOnThreadTest() {
Scheduler s = Schedulers.newParallel("parallel-scheduler", 4);
final Mono<String> mono = Mono.just("Publish on test: \n")
.map(msg -> msg + "before: " + Thread.currentThread() )
.publishOn(s)
.map(msg -> msg + "\nafter: " + Thread.currentThread());
new Thread(() -> mono.subscribe(System.out::println)).start();
}
}
And I cannot make it run, what am I doing wrong? With just subscribe it works but I wanted to look at thread used and play a bit with it.
The reason your test program prints nothing is because it exits too early. It should wait until substriber's method is called:
@Test
public void publishOnThreadTest() throws InterruptedException {
Scheduler s = Schedulers.newParallel("parallel-scheduler", 4);
CountDownLatch latch = new CountDownLatch(1);
final Mono<String> mono = Mono.just("Publish on test: \n")
.map(msg -> msg + "before: " + Thread.currentThread() )
.publishOn(s)
.map(msg -> msg + "\nafter: " + Thread.currentThread());
new Thread(() -> mono.subscribe((String str) ->{
System.out.println(str);
latch.countDown();
})).start();
latch.await();
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.