Webflux 简介
什么是 Spring WebFlux
Spring WebFlux 是 Spring Framework 5.0 引入的响应式 Web 框架,它是 Spring MVC 的替代方案,专为构建非阻塞、异步的 Web 应用程序而设计。
核心特点
- 非阻塞 I/O:基于事件驱动模型,不会阻塞线程等待 I/O 操作完成
- 响应式编程:基于 Reactive Streams 规范,使用 Project Reactor 作为默认实现
- 背压支持:支持背压(Backpressure)机制,防止生产者压垮消费者
- 函数式编程:支持函数式端点定义,提供更灵活的路由方式
WebFlux vs Spring MVC
| 特性 |
Spring MVC |
Spring WebFlux |
| 编程模型 |
命令式(Imperative) |
响应式(Reactive) |
| 线程模型 |
每请求一线程 |
事件循环(Event Loop) |
| I/O 模型 |
阻塞 I/O |
非阻塞 I/O |
| 适用场景 |
传统 Web 应用 |
高并发、流式数据 |
| Servlet 依赖 |
依赖 Servlet API |
可选(支持 Netty) |
| 数据库支持 |
JDBC(阻塞) |
R2DBC(响应式) |
何时使用 WebFlux
适合使用的场景
- 高并发应用:需要处理大量并发连接(如聊天应用、实时推送)
- 流式数据处理:处理实时数据流(如股票行情、IoT 数据)
- 微服务网关:作为 API 网关处理大量请求转发
- 服务间调用密集:需要大量调用外部服务的应用
不适合的场景
- CPU 密集型任务:响应式编程对 CPU 密集型任务没有优势
- 阻塞依赖:如果依赖的库是阻塞的(如传统 JDBC),则无法发挥优势
- 团队不熟悉响应式编程:学习曲线较陡
技术栈对比
1 2 3 4 5 6 7 8 9
| ┌─────────────────────────────────────────────────────────┐ │ Spring Boot │ ├────────────────────────┬────────────────────────────────┤ │ Spring MVC │ Spring WebFlux │ ├────────────────────────┼────────────────────────────────┤ │ Servlet API │ Reactive Streams API │ ├────────────────────────┼────────────────────────────────┤ │ Tomcat/Jetty/Undertow │ Netty/Undertow/Servlet │ └────────────────────────┴────────────────────────────────┘
|
快速开始
Maven 依赖
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>
|
简单示例
1 2 3 4 5 6 7 8 9 10 11 12 13
| @RestController public class HelloController { @GetMapping("/hello") public Mono<String> hello() { return Mono.just("Hello, WebFlux!"); } @GetMapping("/users") public Flux<User> getUsers() { return userService.findAll(); } }
|
相关链接