WebFlux 和 Spring MVC
什么是WebFlux
- 是一个 异步非阻塞的Web框架 ,它能够充分利用多核CPU的硬件资源去处理大量的并发请求
- 优势:内部使用的是响应式编程,以Reactor库为基础,基于异步和事件驱动,可以让我们在不扩充硬件资源的前提下,提升系统的吞吐量和伸缩性。
- 不能使接口的响应时间缩短,它仅仅能够提升吞吐量和伸缩性 。
应用场景
- 特别适合在IO密集型的服务中,比如微服务网关。
- PS: IO 密集型包括: 磁盘IO密集型 , 网络IO密集型 ,微服务网关就属于网络 IO 密集型,使用异步非阻塞式编程模型,能够显著地提升网关对下游服务转发的吞吐量。
选WebFlux还是Spring MVC
-
WebFlux不是 Spring MVC的替代方案!虽然 WebFlux 也可以被运行在 Servlet 容器上(需是 Servlet 3.1+ 以上的容器),但是 WebFlux 主要还是应用在异步非阻塞编程模型,而 Spring MVC 是同步阻塞的,如果你目前在 Spring MVC 框架中大量使用非同步方案,那么,WebFlux 才是你想要的,否则,使用 Spring MVC 才是你的首选。
-
在微服务架构中,Spring MVC 和 WebFlux 可以混合使用,比如已经提到的,对于那些 IO 密集型服务(如网关),我们就可以使用 WebFlux 来实现。
异同点
注意点:
- Spring MVC 因为是使用的同步阻塞式,更方便开发人员编写功能代码,Debug 测试等,一般来说,如果 Spring MVC 能够满足的场景,就尽量不要用 WebFlux;
- WebFlux 默认情况下使用 Netty 作为服务器;
- WebFlux 不支持 MySql ;
WebFlux如何分发
- springmvc 是通过DispatcherServlet,而WebFlux是DispatcherHandler,它实现了WebHandler接口:
- ①:ServerWebExchange 对象中放置每一次 HTTP 请求响应信息,包括参数等;
- ②:判断整个接口映射 mappings 集合是否为空,空则创建一个 Not Found 的错误;
- ③:根据具体的请求地址获取对应的 handlerMapping;
- ④:调用具体业务方法,也就是我们定义的接口方法;
- ⑤:处理返回的结果;
原文
https://juejin.im/post/5e0afca6f265da5d4170e724