在构建响应式 Web 服务上,Spring 5 中引入了全新的编程框架,那就是 Spring WebFlux。作为一款新型的 Web 服务开发框架,它与传统的 WebMVC 相比具体有哪些优势呢?
Spring WebFlux 的应用场景
WebFlux 用于构建响应式 Web 服务。在详细介绍 WebFlux 之前,我们先梳理一下这个新框架的应用场景,了解应用场景才能帮助我们对所要采用的技术体系做出正确的选择。
微服务架构的兴起为 WebFlux 的应用提供了一个很好的场景。我们知道在一个微服务系统中,存在数十乃至数百个独立的微服务,它们相互通信以完成复杂的业务流程。这个过程势必会涉及大量的 I/O 操作,尤其是阻塞式 I/O 操作会整体增加系统的延迟并降低吞吐量。如果能够在复杂的流程中集成非阻塞、异步通信机制,我们就可以高效处理跨服务之间的网络请求。针对这种场景,WebFlux 是一种非常有效的解决方案。
从 WebMVC 到 WebFlux
接下来,我们将讨论 WebMVC 与 WebFlux 之间的差别,而这些差别实际上正是体现在从 WebMVC 到 WebFlux 的演进过程中。让我们先从传统的 Spring WebMVC 技术栈开始说起。
Spring WebMVC技术栈
一般而言,Web 请求处理机制都会使用“管道-过滤器(Pipe-Filter)”架构模式,而 Spring WebMVC 作为一种处理 Web 请求的典型实现方案,同样使用了 Servlet 中的过滤器链(FilterChain)来对请求进行拦截,如下图所示。
我们知道 WebMVC 运行在 Servlet 容器上,这些容器常用的包括 Tomcat、JBoss 等。当 HTTP 请求通过 Servlet 容器时就会被转换为一个 ServletRequest 对象,而最终返回一个 ServletResponse 对象,FilterChain 的定义如下所示。
public interface FilterChain {
public void doFilter (ServletRequest request