Reactor框架
核心API
Mono:0-1的非阻塞结果
Flux:0-n的非阻塞序列
Scheduler:Reactor调度线程池
接下来:实战
加依赖
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
</dependency>
public class FluxDemo {
public static void main(String[] args){
println("Hello World");
Flux.just("A" , "B" , "C") //发布数据序列,依次执行
.subscribe(FluxDemo::println);
}
private static void println(Object object) {
String threadName = Thread.currentThread().getName();
System.out.println("线程:【" + threadName + "】 " + object);
}
}
运行结果:
从这里可以看出,reactor并不是一定是多线程的,那如果变成多线程怎么做?使用publishOn
public class FluxDemo {
public static void main(String[] args){
println("Hello World");
Flux.just("A" , "B" , "C") //发布数据序列,依次执行
.publishOn(Schedulers.elastic()) //切换线程池
.subscribe(FluxDemo::println);
}
private static void println(Object object) {
String threadName = Thread.currentThread().getName();
System.out.println("线程:【" + threadName + "】 " + object);
}
}
运行结果:
当然切换也不止这一种,其他的自己看。reactor作为流式处理,也有类似java8的Stream的处理方法,例如map
public class FluxDemo {
public static void main(String[] args){
println("Hello World");
Flux.just("A" , "B" , "C") //发布数据序列,依次执行
.publishOn(Schedulers.elastic()) //切换线程池
.map(oldValue -> "~" + oldValue)
.subscribe(FluxDemo::println);
}
private static void println(Object object) {
String threadName = Thread.currentThread().getName();
System.out.println("线程:【" + threadName + "】 " + object);
}
}
运行结果:
从结果可以