SpringWebFlux02Flux和Mono
在Reactor中,数据流发布者(Publisher)由Flux和Mono两个类表示,它们都提供了丰富的操作符(operator)。一个Flux对象代表一个包含0个或多个(0..N)元素的响应式序列,而一个Mono对象代表一个包含0或一个(0..1)元素的结果。
Flux和Mono类结构如下:
作为数据流发布者,Flux和Mono都可以发出三种数据信号,元素值、错误信号和完成信号。错误信号和完成信号都是终止信号。完成信号用来告知下游订阅者,数据流是正常结束的。错误信号在终止数据流的同时将错误信息传递给下游订阅者。这三种信号不是一定要完全具备的。
下面这个图所示是一个Flux类型的数据流,横坐标是时间轴,⑥后的黑色竖线是完成信号。连续发出1~6共6个元素值,以及一个完成信号,完成信号告知订阅者数据流已经结束。
下面这个图是一个Mono类型的数据流,其发出一个元素值后,立刻发出一个完成信号。
2、代码实战
2.1 添加依赖
<dependency> <groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.2.5.RELEASE</version>
</dependency>
<!-- 测试 reactor 用 -->
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<version>3.2.5.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
2.2 创建数据流
2.2.1 用 just 创建数据流
Flux.just(1, 2, 3, 4, 5, 6);Mono.just(1);
2.2.2 基于数组创建数据流
Integer[] array = new Integer[]{1, 2, 3, 4, 5, 6};Flux.fromArray(array);
2.2.3 基于集合创建数据流
Integer[] array = new Integer[]{1, 2, 3, 4, 5, 6};List<Integer> list = Arrays.asList(array);
Flux.fromIterable(list);
2.2.4 基于 Stream 创建数据流
Integer[] array = new Integer[]{1, 2, 3, 4, 5, 6};List<Integer> list = Arrays.asList(array);
Stream<Integer> stream = list.stream();
Flux.fromStream(stream);
2.3 Flux和Mono都可以发出三种数据信号,上文中提到元素值、错误信号和完成信号三者并不是要完全具备的,下面就给出几种情况:
// 只有完成信号的空数据流Flux.just();
Flux.empty();
Mono.empty();
Mono.justOrEmpty(Optional.empty());
// 只有错误信号的数据流
Flux.error(new Exception("some error"));
Mono.error(new Exception("some error"));
以上是 SpringWebFlux02Flux和Mono 的全部内容, 来源链接: utcz.com/z/513217.html