响应式编程_04Spring 5 中的响应式编程技术栈_WebFlux 和 Spring Data Reactive

文章目录

  • 概述
  • [响应式Web框架Spring WebFlux](#响应式Web框架Spring WebFlux)
  • [响应式数据访问Spring Data Reactive](#响应式数据访问Spring Data Reactive)

概述

https://spring.io/reactive

2017 年,Spring 发布了新版本 Spring 5, Spring 5 引入了很多核心功能,这其中重要的就是全面拥抱了响应式编程的设计思想和实践。

Spring 5 的响应式编程模型以 Project Reactor 库为基础,而后者则实现了响应式流规范。事实上,Spring Boot 从 2.x 版本开始也是全面依赖 Spring 5。

针对响应式编程技术栈,有一点需要注意,即响应式编程并不是只针对系统中的某一部分组件,而是需要适用于调用链路上的所有组件。无论是 Web 层、服务层还是处于下游的数据访问层,只要有一个环节不是响应式的,那么这个环节就会出现同步阻塞,从而导致响应式编程_02基本概念:背压机制 Backpressure中所介绍的背压机制无法生效。这就是所谓的全栈式响应式编程的设计理念。

因此,Spring 5 也针对响应式编程构建了全栈式的开发组件。对于常见的应用程序而言,Web 服务层和数据访问层构成了最基本的请求链路。而 Spring 5 也提供了

  • 针对 Web 服务层开发的响应式 Web 框架 WebFlux
  • 以及支持响应式数据访问的 Spring Data Reactive 框架

响应式Web框架Spring WebFlux

在 Spring Boot 的基础上,我们将引入全新的 Spring WebFlux 框架。WebFlux 框架名称中的 Flux 一词就来源于 Project Reactor 框架中的 Flux 组件。

WebFlux 功能非常强大,不仅包含了对创建和访问响应式 HTTP 端点的支持,还可以用来实现服务器推送事件以及 WebSocket。

上图针对传统 spring-webmvc 技术栈和新型的 spring-webflux 技术栈做了一个对比。

我们从上往下看

  • 位于最上层所提供的实际上是面向开发人员的开发模式,注意左上部分两者存在一个交集,即 Spring WebFlux 既支持基于 @Controller、@RequestMapping 等注解的传统开发模式,又支持基于 Router Functions 的函数式开发模式

  • 关于框架背后的实现原理,传统的 Spring MVC 构建在 Java EE 的 Servlet 标准之上,该标准本身就是阻塞和同步的。在最新版本的 Servlet 中虽然也添加了异步支持,但是在等待请求的过程中,Servlet 仍然在线程池中保持着线程。而 Spring WebFlux 则是构建在响应式流以及它的实现框架 Reactor 的基础之上的一个开发框架,因此可以基于 HTTP 协议用来构建异步非阻塞的 Web 服务

  • 最后,看一下位于底部的容器支持。显然,Spring MVC 是运行在传统的 Servlet 容器之上,而 Spring WebFlux 则需要支持异步的运行环境,比如 Netty、Undertow 以及 Servlet 3.1 版本以上的 Tomcat 和 Jetty,因为在 Servlet 3.1 中引入了异步 I/O 支持

由于 WebFlux 提供了异步非阻塞的 I/O 特性,因此非常适合用来开发 I/O 密集型服务。而在使用 Spring MVC 就能满足的场景下,就不需要更改为 WebFlux。通常,不大建议你将 WebFlux 和 Spring MVC 混合使用,因为这种开发方式显然无法保证全栈式的响应式流。


响应式数据访问Spring Data Reactive

Spring Data 是 Spring 家族中专门针对数据访问而开发的一个框架,针对各种数据存储媒介抽象了一批 Repository 接口以简化开发过程。而在 Spring Data 的基础上,Spring 5 也全面提供了一组响应式数据访问模型。

在介绍如何使用 Spring Data 实现响应式数据访问模型之前,我们再来看一下关于 Spring Boot 2 的另一张官网架构图

可以看到,上图底部明确把 Spring Data 划分为两大类型,

  • 一类是支持 JDBC、JPA 和部分 NoSQL 的传统 Spring Data Repository,
  • 而另一类则是支持 Mongo、Cassandra、Redis、Couchbase 等的响应式 Spring Data Reactive Repository
相关推荐
白露与泡影7 小时前
阿里 Java 岗个人面经分享(技术三面 + 技术 HR 面):Java 基础 +Spring+JVM+ 并发编程 + 算法 + 缓存
java·jvm·spring
suuijbd7 小时前
谈谈对IOC的理解
java·spring
CPU NULL9 小时前
导入了fastjson2的依赖,但却无法使用相关API的解决方案
java·服务器·后端·学习·spring
datalover9 小时前
spring security为webflux提供鉴权和认证
java·后端·spring·spring-security
拾忆,想起10 小时前
Spring @Lazy:延迟初始化,为应用减负
java·spring boot·spring·spring cloud·微服务
datalover10 小时前
spring security与gateway结合进行网关鉴权和授权
java·spring·gateway
栗筝i10 小时前
Spring 核心技术解析【纯干货版】- IX:Spring 数据访问模块 Spring-Jdbc 模块精讲
数据库·sql·spring
小小工匠10 小时前
响应式编程_03响应式编程在Netflix Hystrix 、Spring Cloud Gateway、Spring WebFlux中的应用
hystrix·gateway·响应式编程·webflux
web2u19 小时前
如何安全地管理Spring Boot项目中的敏感配置信息
java·spring boot·后端·安全·spring·gitee·github