1 reactor 出现的背景、初衷和要达到什么样的目标

Reactor 项目始于 2012 年。 经过长时间的内部孵化,于 2013 年发布 Reactor 1.x 版本。 Reactor 1 在各种架构下都能成功部署,包括开源的(如 Meltdown)和商业的(如 Pivotal RTI)。2014年,通过与一些新兴的响应式数据流规范合作,重新设计并于 2015 年 4 月发布 Reactor 2.0 版本。

1.1 阻塞浪费资源

互联网企业基本上都有着大量的用户,即使当代硬件的性能已经提升了很多,但是性能问题一直是互联网企业不能忽略的一个问题。通常有两种方式来提升应用的性能:

  • 使用更多的线程和硬件资源达到并行化。这也是很多企业采用的方式;
  • 在当前使用的资源上寻求更高效的处理。这在全球经济下行的背景下,是一种成本更低的方式;

1.2 异步能拯救一切嘛?

通过编写异步非阻塞的代码,可以将执行切换到使用了相同底层资源的另一活动任务上,然后在异步完成之后返回到当前任务。提升资源利用率。

java 提供了两种编写异步(异步不一定非阻塞)代码的方式。

  • Callbacks:不立即返回对象,但是提供了一个 callback 参数,当结果可返回时调用。
  • Future:这也是现在大部分程序员在使用的方式。异步方法会立即返回一个 Future。Future 对象对获取该值进行了包装,这个对象可以一直轮询知道返回(除非设置了超时时间)。例如,ExecutorService 使用 Future 对象执行 Callable 任务。

这些技术都有自己的问题:

callback 不好组合,编写有难度,且很容易导致代码难以阅读和维护。
Future 比callback好很多,但是也有自己的问题。

  • 调用 get() 方法会阻塞;
  • 缺乏对多值和高级错误处理的支持。

1.3 从命令式到响应式

作为响应式编程方向上的第一步,Microsoft在.NET生态中创建了响应式(Rx)扩展库。然后RxJava实现了JVM上的响应式编程。随着时间的推移,通过Reactive Streams的努力,一套基于JVM为响应式库定义接口与交互规则的标准规范Reactive Streams 出现了。其接口已经集成到了Java9中的 Flow 类下。

响应式旨在解决上述 JVM 提供的异步方式的缺点,同时关注了其他一些方面:

  • 组合型和易读性
  • 数据作为 流 操作,有着丰富的操作符
  • 在订阅之前什么都不会发生(有什么优点?)
  • 背压,消费者可以向生产者发送信号表示发布速率太快
  • 与并发无关的高阶抽象

reactor 是响应式编程的一种实现。

现代应用程序需要处理大量并发请求并处理大量数据。标准的阻塞代码不再足以满足这些要求。

反应式设计模式是一种基于事件的架构方法,用于异步处理来自单个或多个服务处理程序的大量并发服务请求。

Project Reactor 基于这种模式,并有一个明确而雄心勃勃的目标,即在 JVM 上构建非阻塞、反应式应用程序。

2 reactor 优势和劣势分别是什么

  • 优势
  1. 异步
  2. 非阻塞
  3. 代码可读性高
  4. 背压 解决消息的消费可能比生产慢。
  • 劣势
  1. 对于非响应式 java 开发者来说,学习曲线陡峭。
  2. debug 难度高

3 reactor 的适用场景

  1. 创建事件驱动程序;
  2. 亚马逊等大型在线购物平台的通知服务
  3. 为银行业提供庞大的交易处理服务
  4. 股票价格同时变动的股票交易业务

4 reactor 组成部分和关键节点

4.1 Mono

一种生成数据流的方式。包含0-1个结果的异步序列。

Mono.just(1);

4.2 Flux

另一种生成数据流的方式。包含0-N个结果的异步序列。

Flux.just(1, 2, 3, 4)

5 底层原理与关键实现

生产者-消费者模式?迭代模式?

6 其他竞品技术

https://lxdd.gitbook.io/spring-webflux/reactor

  • Spring Webflux
  • RxJava

Spring WebFlux (project-reactor) 和 RxJava2+ 都是响应式流的实现。
Spring 正在使用 project-reactor,因此它得到了更多的支持、广告和更大的社区,所以用它的人比较多。

6.1 Spring Webflux

Spring Webflux 是一个使用响应式库创建 web 服务的框架。它的主要目标是确保低资源使用(即线程数量少)的高可伸缩性。在底层,它使用 Project Reactor,但是,你也可以将它与 RxJava (或任何其他的响应流实现)一起使用,它甚至可以与 Kotlin 协程一起工作。

换句话说, Reactor 是一个基础响应式包,Spring WebFlux 是一个框架,这个框架默认使用 Reactor,但是可以使用 RxJava,也可以使用 Kotlin 等其他响应式包。

Spring Framework 中包含的原始 Web 框架 Spring Web MVC 是专门为 Servlet API 和 Servlet 容器构建的。反应式堆栈 Web 框架 Spring WebFlux 是在 5.0 版中添加的。它是完全非阻塞的,支持 Reactive Streams 背压,并且可以在 Netty、Undertow 和 Servlet 3.1+ 容器等服务器上运行。

Hello World 级示例:https://blog.csdn.net/get_set/article/details/79480233

6.2 RxJava2

ReactiveX 结合了观察者模式、迭代器模式和函数式编程的最佳思想。它扩展了观察器模式,以支持数据序列和/或事件,并添加了操作符,允许您以声明的方式将序列组合在一起,同时抽象出诸如低级线程、同步、线程安全、并发数据结构和非阻塞I/O等问题。

一般来说,RxJava 支持基于 JDK8- 的项目,project Reactor 支持 JDK8 +。但是对于初学者来说,你可以先学习 RxJava。Project Reactor 可以弥补 RxJava 的缺点,更适合后端开发。RxJava 有太多的问题,如果你不能很好地使用它,可能会导致内存溢出。但最后,如果你想很好地使用 Spring 5.2+,你需要学习 RxJava->Reactor->NIO->Netty->Reactor Netty。

6.3 Reactor VS RxJava

RxJava 和 Reactor 是一些非常著名的库,用于与任何应用程序的后端相关的一些开发。Rxjava 支持的项目大多与 JDK8 相关,而 Reactor 则与所有与 JDK8 + 相关的项目相关。RxJava产生了许多可能导致内存相关问题的问题,但是当与 spring 5.2+ 一起使用时,它会变得非常好。reactor 通常被称为反应式编程范式,它主要涉及用于操作的反应式流 API,并使整个 API 流活动。

https://www.educba.com/rxjava-vs-reactor/

1、github地址:https://github.com/reactor/reactor-core

2、官方文档:https://easywheelsoft.github.io/reactor-core-zh/index.html#error.handling

3、https://segmentfault.com/a/1190000017548728

4、https://www.infoq.com/articles/reactor-by-example/

5、Spring Webflux : https://www.baeldung.com/spring-webflux

6、Java Spring WebFlux vs RxJava:https://stackoverflow.com/questions/56461260/java-spring-webflux-vs-rxjava

Reactor响应式编程 之 简介相关推荐

  1. Reactor响应式编程系列(二)- 背压策略BackPressure

    Reactor响应式编程系列(二)- 背压策略BackPressure 一. Reactor中的背压 声明背压策略 不同的背压策略下的结果 二. request()限制请求 Reactor响应式编程系 ...

  2. Reactor响应式编程

    Reactor响应式编程 介绍响应式编程 响应式编程(reactive programming)是一种基于数据流(data stream)和变化传递(propagation of change)的声明 ...

  3. java reactor 响应式编程

    Spring framework 5 的一大新特性:响应式编程(Reactive Programming). 响应式编程就是基于reactor的思想,当你做一个带有一定延迟的才能够返回的io操作时,不 ...

  4. 使用Reactor响应式编程

    介绍 响应式编程 响应式编程不同于我们熟悉的命令式编程,我们熟悉的命令式编程即代码就是一行接一行的指令,按照它们的顺序一次一条地出现.一个任务被执行,程序就需要等到它执行完了,才能执行下一个任务.每一 ...

  5. 响应式圣经:10W字,实现Spring响应式编程自由

    前言 全链路异步化改造的基础是响应式编程 随着业务的发展,微服务应用的流量越来越大,使用到的资源也越来越多. 在微服务架构下,大量的应用都是 SpringCloud 分布式架构,这种架构总体上是全链路 ...

  6. Reactive 响应式编程简单使用

    Reactive Stream 模型 了解reactive stream(Flow类) 在介绍java版本的reactive stream之前,我们先回顾一下reactive stream需要做哪些事 ...

  7. 响应式编程(反应式编程)的来龙去脉(同步编程、多线程编程、异步编程再到响应式编程)

    响应式编程的来龙去脉(同步编程.多线程编程.异步编程再到响应式编程) 文章目录 响应式编程的来龙去脉(同步编程.多线程编程.异步编程再到响应式编程) 简介 1. 示例 2. 同步编程 3. 多线程编程 ...

  8. Spring Boot 实践折腾记(10):响应式编程支持库Reactor

    Spring Boot 2.0发布已经过去了2个多月,随着微服务的流行,Spring Boot也越来越受到青睐,更好的隔离编程范式得到了越来越多项目的应用,这是一件值得高兴的事. Spring Boo ...

  9. response获取响应内容_Project Reactor 深度解析 - 1. 响应式编程介绍,实现以及现有问题

    现在, Java 的各种基于 Reactor 模型的响应式编程库或者框架越来越多了,像是 RxJava,Project Reactor,Vert.x 等等等等.在 Java 9, Java 也引入了自 ...

最新文章

  1. 【Qt】简单Qt文本查找功能
  2. js 数组过滤_JS之 开发技巧
  3. HTML元素title里面如何换行
  4. ajax荷马史诗,荷马史诗(8)
  5. php怎么给接口里的方法传参,PHP接口中方法的参数和实现类方法中的参数可以不一致的问题...
  6. 为 IDES471 激活中文
  7. sql server 性能_如何在SQL Server中收集性能和系统信息
  8. 冷高轮时间 小人人体形状造型 手势 麻将 扑克 数字时钟APP android安卓版本/iOS苹果版本
  9. PS学习总结一:入门版必备的基础功能
  10. 看红帽巨佬解析⭐《二、G1垃圾回收配置解析》⭐
  11. 名将戚继光与北蒙之战
  12. 精确光源 Punctual Light Source
  13. (predicted == labels).sum().item()作用
  14. 磁共振t1t2信号记忆顺口溜_【 磁共振t1与t2是啥意义】_特点_特征-大众养生网
  15. 读书笔记 | 资本的秘密
  16. vue子组件修改父组件的值
  17. sql-lab 通关Less1 -65(深入学习)
  18. 卷积,反卷积,空洞卷积
  19. Python学习之Part09.高阶函数filter(),map(),reduce(),sorted()
  20. 苹果一体机安装windows7黑屏解决方法

热门文章

  1. 基于部标JT808的车载视频监控需求与EasyCVR视频融合平台解决方案设计
  2. [英语语法]词法之名词
  3. sql如何查询表的第一条记录和最后一条记录
  4. 网格半边结构(Half edge mesh)
  5. 为什么多迪技术人员都喜欢用python写爬虫?
  6. 一款漂亮又实用的Markdown云笔记——Yosoro
  7. 使用cmd查看电脑上连接过的wifi密码
  8. 小项目:简单Web教师工资计算
  9. 社招java阿里_阿里社招Java面试题总结一
  10. 欢迎来到 Elsa Workflows