spring5中的响应式编程框架webflux,到底是什么东西啊?
Posted 360linker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring5中的响应式编程框架webflux,到底是什么东西啊?相关的知识,希望对你有一定的参考价值。
引言
spring 升级到5后,提供了一些新的特性。其中最让我懵逼的就是这个响应式编程。和前端的响应式布局等概念基本没有什么关系。spring介绍他是一个和spirng mvc类似的web层框架。
相关概念
Reactive Streams
Reactive Streams是一个规范,spring响应式编程实现了该规范,它的主要目的是让订阅者控制发布者生成数据的速度或速度。
Backpressure 背亚
使反应式编程比传统代码有显着改进的真正关键是背压。流的生成端 了解 消费端 能够接收多少数据的概念,并且能够相应地调整其吞吐量。
举个例子:服务器发送10个字节给客户端,但是客户端拼了命能收一个字节。那么此时服务器就要调整自己,减少数据输出了。再比如,老师讲10个知识点,学生一个都听不进去,那么老师是继续讲还是停下呢?这可能就是响应式的精髓吧。
Spring Reactor
Reactor 框架是spirng之前的项目,实现了 Reactive Programming 思想,符合 Reactive Streams 规范(Reactive Streams 是由 Netflix、TypeSafe、Pivotal 等公司发起的)的一项技术。
Spring WebFlux
响应式Web框架Spring WebFlux。在ractor基础上实现,它完全无阻塞,支持 Reactive Streams背压,并在Netty,Undertow和Servlet 3.1+容器等服务器上运行。
什么是响应式编程
Reactive Programming 是一种非阻塞、事件驱动数据流的开发方案,使用函数式编程的概念来操作数据流。它允许系统的一部分中的数据更改后,自动更新系统的其他部分并且以最小的成本自我更新的方式。
由于反应流是非阻塞的,因此在处理数据时,应用程序的其余部分不必等待。这有助于允许被动服务器在更传统的实现之外进一步扩展,因为应用程序中的工作线程不会等待其他资源 - 它们通常可以自由处理更多的传入请求。
最好用一个真实的例子来描述。我们将从数据库加载一些数据,对其进行操作然后将其返回给调用者。
需求
1,从数据库查询出一个users 集合。2,循环遍历users集合,并将users中的部分数据存入一个新的names集合中
命令式:
函数式:
响应式:
乍一看,这与以前非常相似。但是,因为这是反应性的,所以整个命令都是非阻塞的,因此我们的主线程不会在操作中被束缚。另外,如果调用者也是反应性的,则非阻塞性质一直传播。
举个栗子:dao在查询数据库时,可能数据库检索时间太长,以前的项目就会进入阻塞状态,但响应式的就不同,当数据库在返回数据前,主线程还可以处理其它请求。当数据库数据返回时,会自动将数据相应给调用者。
Reactor 项目的核心概念
Reactor 中有两个核心类型 - Mono 和 Flux。
简单理解:
Mono<User> 只有一个user数据Flux<User> 有多个user数据
示例代码
在传统服务器中,服务器会在数据库返回所有数据之后,再返回给客户端。如下:
在响应式服务器中,数据库返回一点数据,服务器就可以向客户端打印数据。
这意味着用户的等待时间会减少。
文章来源:https://baijiahao.baidu.com/s?id=1623626102367641502
360linker
与你携手同行
以上是关于spring5中的响应式编程框架webflux,到底是什么东西啊?的主要内容,如果未能解决你的问题,请参考以下文章
响应式Spring的道法术器(Spring WebFlux 快速上手 + 全面介绍)
gateway&reactive(响应式流)函数编程的webflux