Webflux(一)-Webflux介绍

2024/11/05

Webflux介绍

1. 什么是 WebFlux?

Spring WebFlux 是 Spring Framework 5 中引入的一个响应式 Web 框架,它是为了支持非阻塞异步通信和响应式流处理而设计的。 与传统的基于 Servlet 的 Spring MVC 模型不同,WebFlux 基于Reactive Streams 规范,提供了一种完全异步和非阻塞的编程模型

WebFlux 核心基于 Reactor 项目,使用 MonoFlux 这两个主要的反应式抽象来处理单值和多值的流。

2. WebFlux 与 Spring MVC 的区别

Spring MVC 是基于 Servlet 规范的,它使用同步阻塞式的 I/O 模型,适合传统的 Web 应用程序。 每个请求对应一个线程,在处理请求的过程中,线程可能会因为 I/O 操作(例如数据库查询或远程调用)而处于阻塞状态。


WebFlux 则是完全异步的,它使用了 Netty 或 Undertow 这样的非阻塞服务器。 WebFlux 应用的每个请求并不占用线程去等待 I/O 结果,而是基于事件驱动模型,当有数据准备好时才进行处理,这极大地提高了并发处理的能力和资源利用率。

API Servlet WebFlux
前端控制器 DispatcherServlet DispatcherHandler
处理器 Controller WebHandler
请求 ServletRequest ServerHttpRequest
响应 ServletResponse ServerHttpResponse
过滤器 HttpFilter WebFilter
异常处理器 HandlerExceptionResolver DispatchExceptionHandler
Web配置 @EnableWebMvc @EnableWebFlux
自定义配置 WebMvcConfigurer WebFluxConfigurer
返回结果 任意 Mono、Flux、任意
发送REST请求 RestTemplate WebClient

3. Webflux的特点

3-1. 非阻塞 I/O 操作

WebFlux 最显著的特点是其非阻塞 I/O 操作。在处理高并发场景时,WebFlux 能够避免因大量线程阻塞等待 I/O 而带来的性能开销。 非阻塞模型可以使应用在处理大量请求时具备更高的可伸缩性。

3-2. 响应式编程模型

WebFlux 基于响应式编程,提供了一个更适合流式数据处理的编程范式。它使用 FluxMono 作为核心抽象:

  • Mono:表示 0 或 1 个元素的异步序列。
  • Flux:表示 0 到 N 个元素的异步序列。

通过这些抽象,开发者可以方便地处理数据流、组合异步操作,并且能够轻松处理如 backpressure(背压)等复杂的场景。

3-3. 性能更好

WebFlux 是异步非阻塞的,它能够更有效地利用 CPU 和内存资源,特别是在处理高并发请求时。 与传统的同步阻塞模型相比,WebFlux 应用通常能更好地处理大量并发请求,而不会遇到线程耗尽的问题。

3-4. 支持多种 Web 容器

WebFlux 不是基于传统的 Servlet 容器,而是支持 Netty 和 Undertow 等非阻塞服务器。 此外,它也可以运行在支持 Servlet 3.1+ 规范的容器(如 Tomcat 和 Jetty)中,但在这种情况下,WebFlux 会以异步非阻塞的方式运行。

能摸鱼就很舒服

Show Disqus Comments
扫码关注公众号:纯洁的微笑
发送 290992
即可立即永久解锁本站全部文章