1、WebFlux是什么
WebFlux是响应式编程的一个子模块,与SpringMVC平级,在 Reactor 的基础上帮我们做成 mvc 的响应式框架,包含各种路由,异步处理及其各种异步容器的支持。Reactor是一个基于Reactive Streams API规范、 运行在 Java8 之上的响应式流框架。
2、Reactive Streams
2.1 接口定义
Reactive Streams 是“一种规范,它为基于非阻塞回压的异步流处理提供了标准”。在 Java 9 版本中,响应式流的规范被纳入到了 JDK 中,相应的 API 接口是 java.util.concurrent.Flow。它是一组包含了 TCK 工具套件和四个简单接口(Publisher、Subscriber、Subscription 和 Processor)的规范
-
Publisher
发布者(publisher): 它根据收到的要求向当前订阅者发布(或发送)元素。 -
Subscriber
订阅者(subscriber)从发布者那里订阅并接收元素。 -
Subscription
订阅(subscription)保存发布者和订阅者之间的订阅关系。 -
Processor<T,R>
处理者(processor)充当订阅者和发布者的处理阶段。

2.2 背压
是指订阅者能和发布者交互,可以调节发布者发布数据的速率,解决把订阅者压垮的问题;实现原理:发布者Publisher的实现类SubmissionPublisher的submit方法是block方法。订阅者会有一个缓冲池,默认为Flow.defaultBufferSize() = 256。当订阅者的缓冲池满了之后,发布者调用submit方法发布数据就会被阻塞,发布者就会停(慢)下来;订阅者消费了数据之后(调用Subscription.request方法),缓冲池有位置了,submit方法就会继续执行下去,就是通过这样的机制,实现了调节发布者发布数据的速率,消费得快,生成就快,消费得慢,发布者就会被阻塞,当然就会慢下来了。
3、Reactor
Reactor是一个基于Reactive Streams API规范、 运行在 Java8 之上的响应式流框架,
3.1 Flux和 Mono
Flux 和 Mono 是 Reactor 中的两个基本概念,Flux 和 Mono 这两者都是 Reactive Streams 的 Publisher 实现。Flux 表示的是包含 0 到 N 个元素的异步序列。在该序列中可以包含三种不同类型的消息通知:正常的包含元素的消息、序列结束的消息和序列出错的消息。当消息通知产生时,订阅者中对应的方法 onNext(), onComplete()和 onError()会被调用。Mono 表示的是包含 0 或者 1 个元素的异步序列。该序列中同样可以包含与 Flux 相同的三种类型的消息通知。Flux 和 Mono 之间可以进行转换。对一个 Flux 序列进行计数操作,得到的结果是一个 Mono对象。把两个 Mono 序列合并在一起,得到的是一个 Flux 对象。
1、WebFlux使用
webflux的关键是自己编写的代码里面返回流(Flux/Mono),spring框架来负责处理订阅。 spring框架提供2种开发模式来编写响应式代码,使用mvc之前的注解模式和使用router function模式,都需要我们的代码返回流
只有 web server 端支持 react 没有用,必须从前到后,database 首先要支持,client 端也要支持,从请求发起处到返回整个链路必须都得是 reactor 才行;