spring react_使用Spring WebFlux构建React性REST API –第1部分
spring react
在本文中,我们将看到如何使用Spring WebFlux构建响应式REST API。 在进入React式API之前,让我们看看系统是如何发展的,传统REST实现遇到的问题以及现代API的需求。
如果您查看从旧版系统到下文所述的现代系统的期望,
现代系统的期望是,应用程序应该是分布式的,Cloud Native,为实现高可用性和可伸缩性而拥抱。 因此,有效利用系统资源至关重要。 进入为什么要使用响应式编程来构建REST API? 让我们看看传统的REST API请求处理是如何工作的。
以下是传统REST API遇到的问题,
- 阻止和同步→请求正在阻止和同步。 请求线程将等待任何阻塞的I / O,并且直到I / O等待结束后,线程才可以释放以将响应返回给调用方。
- 每个请求的线程 → Web容器使用每个请求模型的线程。 这限制了要处理的并发请求的数量。 除了某些请求之外,容器还会对请求进行排队,这些请求最终会影响API的性能。
- 处理高并发用户的限制 →由于Web容器按请求模型使用线程,因此我们无法处理高并发请求。
- 无法更好地利用系统资源 →线程将因I / O而阻塞并处于空闲状态。 但是,Web容器不能接受更多请求。 在这种情况下,我们将无法有效地利用系统资源。
- 没有反压支持→我们无法从客户端或服务器施加反压。 如果请求突然激增,则可能导致服务器或客户端中断。 之后,用户将无法访问该应用程序。 如果我们有背压支持,则应用程序应在重负载期间持续运行,而不是无法使用。
让我们看看如何使用React式编程解决上述问题。 以下是我们使用React式API所获得的优势。
- 异步和非阻塞→React式编程为编写异步和非阻塞应用程序提供了灵活性。
- 驱动事件/消息 →系统将为任何活动生成事件或消息。 例如,来自数据库的数据被视为事件流。
- 支持背压 →我们可以通过施加背压来优雅地处理从一个系统到另一个系统的压力,从而避免拒绝服务。
- 可预测的应用程序响应时间→由于线程是异步且非阻塞的,因此在负载下应用程序响应时间是可预测的。
- 更好地利用系统资源 →由于线程是异步且非阻塞的,因此不会为I / O 占用线程。 使用更少的线程,我们可以支持更多的用户请求。
- 根据负载缩放
- 远离每个请求的线程 →借助React式API,我们正在远离每个请求的线程模型,因为线程是异步且非阻塞的。 发出请求后,它将与服务器一起创建事件,并且请求线程将被释放以处理其他请求。
现在让我们看看React式编程是如何工作的。 在下面的示例中,一旦应用程序调用了从数据源获取数据的操作,线程将立即返回,并且来自数据源的数据将作为数据/事件流出现。 在这里,应用程序是订阅者,数据源是发布者。 数据流完成后,将触发onComplete事件。
下面是另一种情况,如果发生任何异常,发布者将触发onError事件。
在某些情况下,可能没有发布者要交付的任何物品。 例如,从数据库中删除一个项目。 在这种情况下,发布者将立即触发onComplete / onError事件,而无需调用onNext事件,因为没有数据可返回。
现在,让我们看看什么是背压? 以及我们如何对React流施加背压? 例如,我们有一个客户端应用程序正在从另一个服务请求数据。 该服务能够以1000TPS的速率发布事件,但是客户端应用程序能够以200TPS的速率处理事件。 在这种情况下,客户端应用程序应缓冲其余数据以进行处理。 在随后的调用中,客户端应用程序可能会缓冲更多数据,并最终耗尽内存。 这会对依赖于客户端应用程序的其他应用程序产生级联效应。 为了避免这种情况,客户端应用程序可以要求服务在事件末尾缓冲事件,并以客户端应用程序的速率推送事件。 这称为背压。 下图描述了相同的内容。
在接下来的文章中,我们将看到React流规范及其实施的一个工程React堆一些示例应用程序。 到那时, 快乐学习!!
翻译自: https://www.javacodegeeks.com/2020/05/build-reactive-rest-apis-with-spring-webflux-part1.html
spring react
spring react_使用Spring WebFlux构建React性REST API –第1部分相关推荐
- spring react_使用Spring WebFlux构建React性REST API –第3部分
spring react 在上一篇文章的续篇中,我们将看到一个应用程序以公开React性REST API. 在此应用程序中,我们使用了 带有WebFlux的Spring Boot 具有响应式支持的Ca ...
- spring react_使用Spring WebFlux构建React性REST API –第2部分
spring react 在上一篇文章的续篇中,我们将看到React式流规范及其实现之一,称为Project Reactor . React流规范定义了以下接口. 让我们看看这些接口的细节. 发布者→ ...
- spring react_使用Spring Cloud Gateway保护React式微服务
spring react 朋友不允许朋友写用户身份验证. 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK. 数分钟之内即可在任何应用程序中对用户进行身份验证,管理和保护. 所以你想 ...
- www.how2j.com_HOW-TO:快速开始使用Spring 4.0,以构建简单的REST-Like API(演练)
www.how2j.com HOW-TO:快速开始使用Spring 4.0,以构建简单的REST-Like API(演练) 关于使用Spring MVC创建Web API的另一篇教程. 不太复杂. 只 ...
- Spring Boot 中使用 Swagger2 构建强大的 RESTful API 文档
项目现状:由于前后端分离,没有很好的前后端合作工具. 由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型.HTTP头部信息.HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下 ...
- Spring Boot中使用Swagger2构建强大的RESTful API文档
由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...
- 使用Spring Boot和RxJava的构建响应式REST API
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 我不打算解释什么是响应式编程,也不解释为什么要使用它.我希望你已经在其他地方了解过,如果没有 ...
- 使用Spring WebFlux构建反应性REST API –第1部分
在本文中,我们将看到如何使用Spring WebFlux构建响应式REST API. 在进入反应式API之前,让我们看看系统是如何发展的,传统REST实现遇到的问题以及现代API的需求. 如果您查看从 ...
- Spring干货汇总(含Spring Boot与Spring Cloud)
周末抽空对本号推送的Spring相关内容做个汇总整理(包括spring boot.spring cloud等),方便大家查阅. Spring Boot专题 基础入门内容 SpringBoot快速入门 ...
最新文章
- jasonrpcbridge
- 初步理解TCP/IP网络
- LeetCode Integer to Roman(数字转罗马)
- pageoffice网页提示未安装_Adobe Photoshop CC 2019 详细图文安装教程
- 谷歌浏览器出现“远程计算机访问失败问题”
- 唐山师范学院计算机宿舍,唐山师范学院宿舍条件怎么样宿舍图片内景
- ELK学习总结(3-2)elk的过滤查询
- 索引 CREATE INDEX
- android Toast五种特效
- Word2010与MathType6.7兼容性问题解决方案
- mysql数据库隔离级别 实现原理_MySQL事务及Spring隔离级别实现原理详解
- C程序设计--文件1--文件的分类+文件的打开和关闭
- jdk chm右边文档打不开的问题
- 【bzoj4173】数学
- Bazel入门:编译C++项目
- 连接HDMI出现没声音
- 抽象代数的代码实现(6)自同构、正规子群、商群
- 移动硬盘 RAW修复
- PAT合集1096 大美数 (15 分)
- python爬豆瓣top250书籍_python爬虫练习-爬取豆瓣图书top250
热门文章
- 【无码专区13】最小公倍数(线段树)
- 二分:[BJWC2008]秦腾与教学评估
- CF587F-Duff is Mad【AC自动机,根号分治】
- 牛客挑战赛48C-铬合金之声【Prufer序列】
- [2020.11.26NOIP模拟赛]询问【字符串hash】
- P2839-[国家集训队]middle【主席树,二分】
- jzoj4015-数列【循环节,数论】
- 【传递闭包】【倍增】幸福路径(P4308)
- 【区间DP】摆渡线路(2017 特长生 T4)
- 【数学】礼物(jzoj 2129)