WebFlux 是 Spring 5 引入的响应式编程框架,作为传统 Spring MVC 的替代方案,特别适合高并发、低延迟的异步非阻塞场景
WebFlux特别适合微服务架构中的网关、代理服务和高并发API场景,但对于传统CRUD应用,Spring MVC仍然是更简单的选择。
使用过程中的注意点:
- 避免阻塞操作:不要在响应式链中调用阻塞方法
- 合理使用调度器:控制线程模型(Schedulers)
- 背压处理:正确处理订阅者的需求速率
- 错误处理:使用onErrorResume等操作符
核心概念
- 响应式编程模型:基于 Reactive Streams 规范,使用 Publisher-Subscriber 模式
- 非阻塞 I/O:使用 Netty 或 Servlet 3.1+ 容器作为底层服务器
- 函数式编程:支持 Router Functions 和 Handler Functions 的声明式 API
主要组件
1. Reactive 核心类型
Mono: 表示 0 或 1 个元素的异步序列Flux: 表示 0 到 N 个元素的异步序列2. WebFlux 架构
- 基于 Reactor 库实现响应式流
- 支持两种编程模型:
- 注解驱动(类似 Spring MVC)
- 函数式端点(Router Functions
关键特性
- 响应式数据访问:支持 Reactive Repositories (MongoDB, Cassandra, Redis等)
- WebClient:非阻塞的HTTP客户端
- 服务器推送事件(SSE):支持实时数据流
- WebSocket支持:全双工通信
- 函数式路由:RouterFunction API
使用案例
@SpringBootApplication public class WebFluxDemoApplication { public static void main(String[] args) { SpringApplication.run(WebFluxDemoApplication.class, args); } } @RestController @RequestMapping("/api") class DemoController { @GetMapping("/hello") public Mono<String> hello() { return Mono.just("Hello, WebFlux!"); } @GetMapping("/numbers") public Flux<Integer> numbers() { return Flux.range(1, 10) .delayElements(Duration.ofMillis(200)); } }<project> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId&

最低0.47元/天 解锁文章
559

被折叠的 条评论
为什么被折叠?



