spring-210730-03—Spring5新功能-Webflux-响应式编程-Reactor实现&操作符
Reactor有两个核心类,Mono和Flux
响应式编程操作中,Reactor是满足Reactive规范框架。
Reactor有两个核心类,Mono和Flux,这两个类实现了接口Publisher,提供了丰富的操作符。
1) Flux对象实现发布者,返回N个元素,
2) Mono对象实现发布者,返回0或者1个元素。
Flux和Mono都是数据流的发布者,使用Flux和Mono都可以发出三种数据信号:
1) 元素值,
2) 错误信号,终止数据流的同时把错误信息传递给订阅者,
3) 完成信号,
错误信号和完成信号都代表终止信号,终止信号用于告诉订阅者数据流结束了。
三种信号的特点:
1) 错误信号和完成信都是终止信号,不能共存
2) 如果没有发送任何元素值,而是直接发送错误信号或者完成信号,表示是空数据流
3) 如果没有错误信号,没有完成信号,表示是无限数据流
操作符
对数据进行一道道操作,称为操作符,比如工厂流水线等
两个常见操作符:
1) map
元素映射为新元素
2) flatMap
元素映射为流
做法:把每个元素先转换为流,再把转换之后的多个流合成一个大的流
Reactor演示
引入依赖
需要先引入这个依赖↓↓↓↓
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.3.9.RELEASE</version>
</dependency>
TestReactor.java
package com.bgy.spring.reactorjava8;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class TestReactor {
public static void main(String[] args) {
/*
调用just或者其他方法只是声明数据流,数据流并没有发出,
只有进行订阅之后才会触发数据流,不订阅什么都不会发生。
所以要调用订阅方法 subscribe()
*/
// just方法直接声明
Flux.just(1,2,3,4).subscribe(System.out::println);
Mono.just(1).subscribe(System.out::println);
//其他方法声明
Integer[] array = {1,2,3,4};
Flux.fromArray(array);
List<Integer> list = Arrays.asList(array);
Flux.fromIterable(list);
Stream<Integer> stream = list.stream();
Flux.fromStream(stream);
}
}