为什么要使用Spring Webflux

因为Spring MVC是同步阻塞的,这也就意味着当请求发送给服务端后,服务端不会立刻做出响应,而是要先等待服务端处理,处理完以后再响应

然而Webflux是异步非阻塞的,采用发布者订阅者模式。Webflux会立刻对客户端的请求做出响应。

异步非阻塞

WebFlux要求所有的技术栈都是异步非阻塞的,而不是仅仅WebFlux自身是异步非阻塞。即,下图中的Netty,数据库等都必须支持异步非阻塞。因此不支持Mybatis,因为是同步阻塞的。

image.png

WebFlux的前置技术

要学习WebFlux,首先要懂:

  • JDK8 Lambda stream
  • 函数式编程
  • reactive stream
  • project reactor

Reactive Stream(响应式流)

在JDK9引入的一套标准。

背压(Back-pressure)

在Reactive Stream中,有背压(back-pressure)的概念。

在传统的发布者-订阅者模式中,发布者给多少数据,订阅者就接收多少数据。这就可能导致数据的浪费。

背压则表示,订阅者可以告诉发布者需要多少数据,然后发布者就会生产所需的数据。

异步Servlet