Reactor 响应式编程简述 03
概述:Reactive Streams/Reactor/WebFlux 三者的关系
对于Reactive Streams 的概念,之前在这篇文章中介绍过,现在对比一下标题中三个概念的关系。
- Reactive Streams 是一套规范,为反应式编程做了标准化。
- Reactor 是基于Reactive Streams 的一套反应式编程框架。
- WebFlux 是以Reactor 为基础,是一个“反应式编程”的web 框架。
对于我们日常的开发,目前业界主流的还是基于Servlet的MVC 框架,所以业务开发中,如果使用到了反应式编程的思想,通常只会接触到Publisher 接口,而对应到Reactor 框架即使实现了这个接口的Mono和Flux 。
对于“订阅者Subscriber”和“订阅Subscription”这两个接口,Reactor框架也有对应的实现,但是这些都是Spring WebFlux和Spring Data Reactive 这种框架用到的。加入不是开发中间件,对于这两个框架,我们目前还接触不到。所以我们主要把精力集中在Mono和Flux上面就好。
对于Reactor 的使用,基本分为三个步骤:
- 创建阶段(开始)
- 处理阶段(中间)
- 消费阶段(结束)
但是对于我们日常开发,创建和消费的流程使用的不太多,但是我们也要了解这些阶段是如何开发的。
一、创建Mono 和Flux(开始)
如果想使用Reactor ,那么必然要先以创建出Mono或者Flux 开始。
有时候可能不需要我们自己创建,而是实现某些框架或者接口得到一个Mono或者Flux。但是有的时候,需要我们手动创建一个Mono或者Flux。
可以这么创建:
二、Mono和Flux 处理阶段(中间)
主要的方法
- filter
- map
- flatmap
- then
- zip
- reduce 当我们看到这些方法的时候,会发现有点眼熟,其实Stream 中的方法类似。
2.1 map、flatMap、then 的使用场景
在 Mono 和 Flux 的中间环节的处理过程中,有三个比较类似的方法,分别是map()、flatMap()、then()。这三个方法在日常的开发过程中,使用频率很高。
这里我们对比传统编程方式(命令式)和反应式编程方式。
传统的编程方式如下,每一步执行的结果,作为下一步执行的参数:
Object firstResult = doStep1(p