Spring 5 响应式编程:构建高性能全栈应用的关键

article/2025/6/29 0:41:03

本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!

  • 🚀 魔都架构师 | 全网30W技术追随者
  • 🔧 大厂分布式系统/数据中台实战专家
  • 🏆 主导交易系统百万级流量调优 & 车联网平台架构
  • 🧠 AIGC应用开发先行者 | 区块链落地实践者
  • 🌍 以技术驱动创新,我们的征途是改变世界!
  • 👉 实战干货:编程严选网

1 引言

Spring支持响应式编程,梳理 Spring 框架中的响应式编程技术栈,并引出贯穿整个教程的案例系统。

2 Spring5响应式编程技术栈

17年 Spring 发布 Spring 5,引入很多核心功能,重要的就是全面拥抱了响应式编程的设计思想和实践。Spring5响应式编程模型以 Proiect Reactor 库为基础,而后者实现响应式流规范。

响应式编程并非只针对系统中的某部分组件,而是需要适用于调用链路上的所有组件。只要有一个环节非响应式,这环节就会出现同步阻塞,即全栈式响应式编程。

Spring 5也针对响应式编程,构建了全栈式的开发组件,提供:

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

3 Spring WebFlux

WebFlux 框架名称中的 Flux 源 Project Reactor 框架中的 Flux 组件。WebFlux 不仅包含:

  • 对创建和访问响应式HTTP 端点的支持
  • 还可用来实现SSE、WebSocket

3.1 架构图

webflux架构图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.2 实现原理

传统的 Spring MVC 构建在 Java EE 的Servlet 标准之上,该标准本身就是阻塞和同步的。

最新版Servlet在等待请求过程中,仍在线程池中保持着线程。Spring WebFlux则是构建在响应式流及它的实现框架 Reactor 基础上的一个开发框架,因此能基于 HTTP 协议用来构建异步非阻塞的 Web 服务。

  • Spring MVC 是运行在传统的 Servlet 容器之上
  • 而 Spring WebFlux 则需要支持异步的运行环境,如Netty、Undertow以及 Servlet 3.1 版本以上的 Tomcat和Jetty

WebFlux 提供异步非阻塞的 I/0 特性,适合开发I/O密集型服务。

不推荐 WebFlux、Spring MVC 混用,因为显然无法保证全栈式响应式流。

4 Spring Data Reactive

Spring Data 是 Spring 家族中专门针对数据访问而开发的一个框架,针对各种数据存储媒介抽象了一批 Repository 接口,以简化开发过程。

Spring Boot2架构图:

5 案例ReactiveSpringCSS

CSS,客户服务系统 Customer Service System,构建一个精简但又完整的系统来展示 Spring 5 中响应式编程相关的设计理念和各项技术组件。

案例系统的目的在于演示技术实现过程,不在于介绍具体业务逻辑所以我们对案例的业务流程做了高度的简化。

ReactiveSpringCSS 中,存在一个 customer-service这是一个 Spring Boot 应用程序,也是整个案例系统中的主体服务。

Web 层

使用 Spring WebFlux 组件来分别为系统中的三个服务构建响应式 RESTful 端点,并通过支持响应式请求的 Webclient 客户端组件来消费这些端点。

Service层

完成事件处理和消息通信相关的业务场景。

  • account-service 消息的发布者
  • customer-service 消费者

Spring5也针对Spring Cloud Stream做响应式升级并提供对应的响应式编程组件。

Repository层

引入 MongoDB、Redis 两款支持响应式流的 NOSQL:

  • MongoDB为各个服务存储业务数据
  • Redis主要用在 customer-service

分别引入 Spring 5中的 Spring Data MongoDB Reactive和 Spring Data Redis Reactive 进行整合。

总结

本教程是一款以案例驱动的响应式应用程序开发的教程。
今天我们就针对Spring5中所提供的响应式编程组件进行了展开,并引出了贯穿整课程体系的ReactiveSpringCSS案例系统。

FAQ

Spring WebFlux V.S Spring MVC

两种不同 Web 框架:

  1. 编程模型:Spring WebFlux 基于响应式编程模型,使用 Reactor 库来处理异步和非阻塞的 I/O 操作,而 Spring MVC 则是基于传统的 Servlet API,使用阻塞式 I/O 操作。

  2. 线程模型:Spring WebFlux 使用少量的线程来处理大量的并发请求,通过 Reactor 库提供的事件循环机制来实现非阻塞式 I/O 操作。而 Spring MVC 则是使用线程池来处理请求,并且每个请求都会占用一个线程。

  3. 响应式支持:Spring WebFlux 支持响应式编程,可以使用 Mono 和 Flux 类型来处理异步操作和流式数据。而 Spring MVC 则不支持响应式编程。

  4. 异常处理:Spring WebFlux异常处理机制不同于Spring MVC,它用函数式编程模型处理异常。WebFlux异常处理器是函数,接收一个 ServerRequest 对象和一个 Throwable 对象,并返回一个Mono<ServerResponse>对象。而Spring MVC异常处理器是一个类,需实现HandlerExceptionResolver接口

  5. 安全性:由于 Spring WebFlux 使用少量的线程来处理大量的并发请求,因此它可以更好地保护系统免受拒绝服务攻击。而 Spring MVC 则需要使用线程池来处理请求,容易受到拒绝服务攻击的影响。

总之,Spring WebFlux 和 Spring MVC 都是很好的 Web 框架,选择哪个取决于具体的应用场景和需求。如果需要处理大量的并发请求,并希望使用响应式编程模型来实现非阻塞式 I/O 操作,那么可以选择 Spring WebFlux;如果应用程序需要使用传统的 Servlet API,并且不需要响应式支持,那么可以选择 Spring MVC。

参考:

  • https://docs.spring.io/spring-framework/docs/5.0.0.M5/spring-framework-reference/html/web-reactive.html

http://www.hkcw.cn/article/xlPNQDhOfT.shtml

相关文章

用“红烧鱼”类比说明卷积神经网络CNN的概念

我们用一个生活中的例子——「厨房做红烧鱼」 的场景&#xff0c;来类比卷积神经网络中多层卷积核的工作过程。你会发现&#xff0c;卷积层就像厨房里分工明确的厨师团队&#xff0c;逐步处理食材&#xff0c;最终完成一道复杂的菜品。 &#x1f41f; 生活案例&#xff1a;厨房…

如何捍卫德国利益 默茨访美很“烧脑”

根据德国政府日前的声明,德国总理默茨将于当地时间5日访美,与美国总统特朗普举行首次单独会晤。△路透社报道截图德美关系一直是西方世界中最为重要的双边关系之一。然而,自美国总统特朗普提出“美国优先”理念以来,这对跨大西洋盟友间的裂痕不断加深。此前,白宫椭圆形办公…

Google机器学习实践指南(TensorFlow六大优化器)

&#x1f525; Google机器学习实践指南&#xff08;TensorFlow六大优化器&#xff09; Google机器学习实战(12)-20分钟掌握TensorFlow优化器 一、优化器核心作用 ▲ 训练本质&#xff1a; 迭代求解使损失函数最小化的模型参数&#xff0c;关键要素&#xff1a; 特征工程&…

第15讲、Odoo 18 中 自动任务(ir.cron) 的实现原理与应用

目录 引言ir.cron 实现原理运行机制应用场景使用案例 案例一&#xff1a;定期发送邮件通知案例二&#xff1a;自动清理过期数据案例三&#xff1a;订单状态自动更新案例四&#xff1a;系统健康检查 最佳实践与注意事项总结 引言 在企业级应用中&#xff0c;自动化是提高效率…

消费信心回升5.3%!亚马逊泳装搜索量暴涨120%的启示

近期&#xff0c;美国经济呈现出令人鼓舞的复苏迹象。根据密歇根大学发布的最新消费者信心指数&#xff08;Consumer Sentiment Index&#xff09;&#xff0c;2024年5月&#xff0c;该指数环比增长5.3%&#xff0c;达到69.1&#xff0c;创下自2023年中以来的最高水平。与此同时…

绿发会回应涉哈佛女孩蒋雨融争议 特权质疑风波

绿发会回应涉哈佛女孩蒋雨融争议 特权质疑风波!2025年5月29日,哈佛大学毕业典礼上,中国籍学生蒋雨融作为毕业生代表发表演讲。她穿着中国传统服饰,通过讲述翻译洗衣机中文标识的趣事,呼吁多元与包容,并间接批评了特朗普政府的“禁招令”。这场本应充满励志色彩的演讲却因…

高效使用Map的“新”方法

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一个为了让更多人看见许舒雅的宝贝的小白先生 &#x1f921;个人主页&#xff1a;&#x1f517; 许舒雅的宝贝 &#x1f43c;座右铭&#xff1a;深夜两点半的夜灯依旧闪烁&#xff0c;凌晨四点的闹钟不止你一个。 &…

35.x64汇编写法(二)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;34.x64汇编写法&#xff08;一&#xff09; 上一个内容写了&#xff0c;汇编调…

多地公共自行车退场 设备老旧促变革

多地公共自行车退场 设备老旧促变革!近期,多地宣布公共自行车项目停止运营。安徽省马鞍山市和县住房和城乡建设局发布公告称,该县公共自行车将于5月28日终止运营,有需要的市民在2025年6月28日前办理骑行卡押金退款业务。和县公共自行车系统于2016年2月正式运营,县城主城区…

Python----目标检测(训练YOLOV8网络)

一、数据集标注 在已经采集的数据中&#xff0c;使用labelImg进行数据集标注&#xff0c;标注后的txt与原始 图像文件同名且在同一个文件夹&#xff08;data&#xff09;即可。 二、制作数据集 在data目录的同目录下&#xff0c;新建dataset目录&#xff0c;以存放制作好的YOLO…

一周学会Pandas2之Python数据处理与分析-Pandas2时间序列数据分析

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Pandas 提供了强大的时间序列处理功能&#xff0c;是金融分析、物联网数据处理、业务指标监控等领域的核心工具。下面…

房屋租赁系统 Java+Vue.js+SpringBoot,包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块

房屋租赁系统 JavaVue.jsSpringBoot&#xff0c;包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块 百度云盘链接&#xff1a;https://pan.baidu.com/s/16YRGBPsfbd4_HxXhO0jM5Q 密码&#xff1a;smk4 摘 要 房屋是人类生活栖息的重要…

【PowerQuery专栏】Record.Combine 函数实现记录连接

Record.Combine 函数功能是将多个不同的记录进行合并&#xff0c;函数目前包含如下参数&#xff1a; 参数1为合并记录&#xff0c;数据类型为列表类型&#xff0c;值为需要进行合并操作的记录 函数的结果为记录类型&#xff0c;图为函数参数。 Record.Combine(record as lis…

C++标准模板库

C标准库参考&#xff1a; C 标准库-CSDN博客 标准模板库STL C 标准库 和 STL 的关系 1. 严格来说&#xff0c;STL ≠ C 标准库 STL&#xff08;Standard Template Library&#xff09; 是 C 标准库的一个子集&#xff0c;主要提供泛型编程相关的组件&#xff08;如容器、迭代器…

Grafana对接Prometheus数据源

实验环境 在上一章的基础上完成 一、Grafana介绍 Grafana是一个独立的开源项目&#xff0c;它可以对接很多项目&#xff0c;实现各种功能的扩展 使用grafana对接Prometheus可以更好的展示Prometheus的metrics&#xff08;指标&#xff09; 二、Grafana安装 1、安装Grafana…

Flex弹性布局

Flexible Box&#xff08;弹性盒子&#xff09;布局是CSS3中引入的一种强大的布局模式&#xff0c;它能够更高效地处理容器内项目的排列、对齐和空间分配问题&#xff0c;特别适合构建响应式设计。 基本属性 Flex容器&#xff1a;设置了display: flex或display: inline-flex的…

Vue3(watch,watchEffect,标签中ref的使用,TS,props,生命周期)

Vue3&#xff08;watch&#xff0c;watchEffect&#xff0c;标签中ref的使用,TS,props,生命周期&#xff09; watch监视 情况三&#xff1a;监视reactive定义的对象类型的数据 监视reactive定义的对象类型的数据&#xff0c;默认开启深度监视。地址没变&#xff0c;新值和旧…

AI书签管理工具开发全记录(九):用户端页面集成与展示

文章目录 AI书签管理工具开发全记录&#xff08;九&#xff09;&#xff1a;用户端页面集成与展示前言设计思路实现步骤1. 路由配置2. 全局样式设置3. 首页实现4. Vite配置 设计说明1. 部分UI设计2. 响应式布局3. 加载更多功能 效果展示效果展示 AI书签管理工具开发全记录&…

基于IRI-2020模型的电离层特征参量计算与可视化

1. 研究背景 电离层是地球大气层中重要的组成部分&#xff0c;位于地面以上约60-1000公里高度范围内&#xff0c;包含大量自由电子和离子。电离层对无线电通信、卫星导航和空间天气监测等现代技术系统具有重要影响。国际参考电离层模型(IRI)是由国际空间研究委员会(COSPAR)和国…

Chapter 10 Inductive DC–DC Converters

Chapter 10 Inductive DC–DC Converters Design of Power Management Integrated Circuits - Bernhard Wicht 电感型DC-DC用电感做功率转换, 因为有开关, 也被称为开关型DC-DC. 电感型DC-DC相比LDO, 效率更高, 但是不那么"干净". 相比于电容型DC-DC (switched cap…