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

回到顶部