【项目实战】一文看懂SpringCloud Gateway中的响应式编程Spring Reactor的应用
一、背景
如果要做 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);
相关文章
- springcloud eruka刷新时间配置实战「建议收藏」
- SpringCloud与Dubbo区别[通俗易懂]
- SpringCloud SpringCloud与Dubbo的区别
- 全新出品!Github总榜排行第七的SpringCloud生态全栈笔记我粉了
- Spring Cloud实战|3.SpringCloud 整合common模块
- SpringCloud 实战|SpringCloud 整合Sentinel-轻轻松松实现限流
- SpringCloud架构入门学习和使用
- 知乎三天点击破亿!四天精通springcloud微服务架构
- SpringCloud微服务开发实战:如何进行微服务的拆分?
- springcloud微服务架构实战:商家管理微服务设计
- SpringCloud 整合 Dubbo
- SpringCloud之gateway
- Spring监听器-spring源码详解(五)
- SpringCloud是什么?SpringCloud有什么用?
- SpringCloud之Stream
- 高并发核心编程SpringCloud+Nginx秒杀实战,秒杀系统的系统架构
- SpringCloud 微服务工具集总结
- SpringCloud 开源项目,效率提升 20 倍!
- spring的AOP(四)—-Spring AOP 编程(Advisor)详解编程语言
- spring Boot(十九):使用Spring Boot Actuator监控应用详解编程语言
- Spring Boot(五):spring data jpa的使用详解编程语言
- Spring Boot 2.x :通过 spring-boot-starter-hbase 集成 HBase