前面一个文章学习了SpringWebFlux的实现, 其中有两个概念咱们没有细说,Flux和Mono。Reactor是Spring WebFlux的首选反应式编程库。 它提供Mono和Flux API类型来处理0..1和0..N的数据序列。
Mono
Mono 是一个发出(emit)0-1个元素的Publisher<T>,可以被onComplete信号或者onError信号所终止。
创建Mono有两种方法
- 通过Mono静态方法创建:
empty():创建一个不包含任何元素,只发布结束消息的序列。
just():可以指定序列中包含的全部元素。创建出来的 Mono序列在发布这些元素之后会自动结束
justOrEmpty():从一个 Optional 对象或可能为 null 的对象中创建 Mono。只有 Optional 对象中包含值或对象不为 null 时,Mono 序列才产生对应的元素。
error(Throwable error):创建一个只包含错误消息的序列。
never():创建一个不包含任何消息通知的序列。
例:
Mono.justOrEmpty(userDao.findById(id));
- 通过 create()方法来使用 MonoSink 来创建 Mono。
Mono.create(userMonoSink -> userMonoSink.success(userDao.save(user)));
Flux
Flux 是一个发出(emit)0-N个元素组成的异步序列的Publisher<T>,可以被onComplete信号或者onError信号所终止。在响应流规范中存在三种给下游消费者调用的方法 onNext, onComplete, 和onError