文章目录
Spring Mvc 和 Spring WebFlux
WebFlux 的优势&提升性能
WebFlux 应用场景
异同点
响应式编程
Reactive Streams
顶级接口
Reactor
Reactor实现
Flux
Mono
Flux常用函数
**调试reactor**
StepVerifier方法
Reactor中的多线程
**Schedulers**
Schedulers.immediate()
Schedulers.single()
Schedulers.elastic()
Schedulers.parallel()
错误处理
**onErrorReturn**
**onErrorResume**
**onErrorMap**
**doOnError** **记录错误日志**
**finally 确保做一些事情**
**retry 重试机制**
背压(流量控制)
Spring Mvc 和 Spring WebFlux
Spring MVC 构建于 Servlet API 之上,使用的是同步阻塞式 I/O 模型,每一个请求对应一个线程去处理。
Spring WebFlux 是一个异步非阻塞式的 Web 框架,它能够充分利用多核 CPU 的硬件资源去处理大量的并发请求。
WebFlux 的优势&提升性能
WebFlux 内部使用的是响应式编程(Reactive Programming),以 Reactor 库为基础, 基于异步和事件驱动,可以让我们在不扩充硬件资源的前提下,提升系统的吞吐量和伸缩性。
WebFlux 并不能使接口的响应时间缩短,它仅仅能够提升吞吐量和伸缩性。
WebFlux 应用场景
Spring WebFlux 是一个异步非阻塞式的 Web 框架,所以,它特别适合应用在 IO 密集型的服务中,比如微服务网关这样的应用中。
备注:
IO 密集型包括:磁盘IO密集型, 网络IO密集型,微服务网关就属于网络 IO 密集型,使用异步非阻塞式编程模型,能够显著地提升网关对下游服务转发的吞吐量。
异同点
相同点:
都可以使用 Spring MVC 注解,如 @Controller, 方便我们在两个 Web 框架中自由转换;
均可以使用 Tomcat, Jetty, Undertow Servlet 容器(Servlet 3.1+);
注意点:
Spring MVC 因为是使用的同步阻塞式,更方便开发人员编写功能代码,