Flux,
an Asynchronous Sequence of 0-N Items
Flux
是通用反应类型. 请注意,所有事件,包括终止事件,都是可选择的。
如没有onNext
事件,但是有一个 onComplete
事件 表示一个有限空序列,如果移除 onComplete
事件,表示一个无限空序列
同样,无限序列不一定是空的。例如,Flux.interval(Duration)
产生一个Flux<Long>
,无限的并从时钟发出定期滴答声。
Mono
an Asynchronous 0-1 Result
Mono<T>
是一个特殊的 Publisher<T>
,通过 onNext
信号,最多发送一个事件,然后通过onComplete
或onError
信号终止
大多数 Mono
实现在调用 onNext
之后,希望立即调用 Subscriber
的 onComplete
方法
可以用 Mono
表示只有完成概念的无值异步流程,类似于 Runnable
,例如可以创建一个空的Mono<Void>
Create and Subscribe
创建 Flux
和 Mono
最简单的方式是使用各自类中的工厂方法。
Flux<String> seq1 = Flux.just("foo", "bar", "foobar");
List<String> iterable = Arrays.asList("foo", "bar", "foobar");
Flux<String> seq2 = Flux.fromIterable(iterable);
Mono<String> noData = Mono.empty();
Mono<String> data = Mono.just("foo");
// 第一个参数是起始值,而第二个参数是要生产的个数。
Flux<Integer> numbersFromFiveToSeven = Flux.range(5, 3);
在订阅方面,存在一系列将lambdas
用于不同回调组合的.subscribe()
变体
// 订阅并触发序列
subscribe();
// Do something with each value,处理 value
subscribe(Consumer<? super T> consumer);
// do something and reactor to error,处理 value 和 error
subscribe(