zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【项目实战】一文看懂SpringCloud Gateway中的响应式编程Spring Reactor的应用

2023-09-14 09:04:55 时间

一、背景

如果要做 SpringCloud Gateway 的开发, 就必须掌握一些响应式编程的知识
那么什么是响应式编程呢?

二、什么是响应式编程?

为了应对高并发服务器端开发场景,在2009 年,微软提出了一个更优雅地实现异步编程的方式——Reactive Programming,我们称之为响应式编程。随后,Netflix 和LightBend 公司提供了RxJava 和Akka Stream 等技术,使得Java 平台也有了能够实现响应式编程的框架。

在2017 年9 月28 日,Spring 5 正式发布。Spring 5 发布最大的意义在于,它将响应式编程技术的普及向前推进了一大步。而同时,作为在背后支持Spring 5 响应式编程的框架Spring Reactor,也进入了里程碑式的3.1.0 版本。

响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。

响应式编程基于Reactor 的思想,当你做一个带有一定延迟的才能够返回的io操作时,不会阻塞,而是立刻返回一个流,并且订阅这个流,当这个流上产生了返回数据,可以立刻得到通知并调用回调函数处理数据。

(Reactor 是一个运行在 Java8 之上的响应式框架)

三、举例说明响应式编程

3.1 案例1:电子表格程序

电子表格程序就是响应式编程的一个例子。
单元格可以包含字面值或类似"=B1+C1"的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化。响应式传播核心特点之一:变化传播。体现在这,就是当一个单元格变化之后,会像多米诺骨牌一样,导致直接和间接引用它的其他单元格均发生相应变化。

3.2 案例2:

四、Momo 和 Flux 的区别

Momo 和 Flux 是两种不同的架构模式。
Momo 是一种轻量级的移动应用架构

五、Reactor响应式编程(Mono)

在响应式编程中,Momo 是指数据流的变化会导致相应的处理函数被自动触发执行。通俗地说,就是当数据发生变化时,程序能够自动地做出响应。这种编程方式可以让程序更简洁,更容易维护。

类reactor.core.publisher.Mono
返回值,原来返回List的地方变成Flux,原来返回单个对象的地方变成Mono。
Flux就是List的一种变式,Mono表示单个对象。

由于WebFlux 是响应式的, 所以从DAO 到Service 再到 Controller ,层层之间都必须是响应式的,层与层之前数据交互处理都只能是Mono和Flux,这样就导致了很多阻塞式的框架无法使用,所以传统的关系型数据库框架(JDBC、JPA) 都无法使用(其实已经有了RxJDBC,但是要你去直接操作JDBC,太麻烦了)。
(只要跟数据库相关的,基本都没有办法搞响应了)

Java中reactor.core.publisher.Mono

Mono.just方法的
Mono.error(e);