Reactor 项目始于 2012 年。 经过长时间的内部孵化,于 2013 年发布 Reactor 1.x 版本。 Reactor 1 在各种架构下都能成功部署,包括开源的(如 Meltdown)和商业的(如 Pivotal RTI)。2014年,通过与一些新兴的响应式数据流规范合作,重新设计并于 2015 年 4 月发布 Reactor 2.0 版本。
互联网企业基本上都有着大量的用户,即使当代硬件的性能已经提升了很多,但是性能问题一直是互联网企业不能忽略的一个问题。通常有两种方式来提升应用的性能:
通过编写异步非阻塞的代码,可以将执行切换到使用了相同底层资源的另一活动任务上,然后在异步完成之后返回到当前任务。提升资源利用率。
java 提供了两种编写异步(异步不一定非阻塞)代码的方式。
这些技术都有自己的问题:
callback 不好组合,编写有难度,且很容易导致代码难以阅读和维护。 Future 比callback好很多,但是也有自己的问题。
作为响应式编程方向上的第一步,Microsoft在.NET生态中创建了响应式(Rx)扩展库。然后RxJava实现了JVM上的响应式编程。随着时间的推移,通过Reactive Streams的努力,一套基于JVM为响应式库定义接口与交互规则的标准规范
Reactive Streams
出现了。其接口已经集成到了Java9中的 Flow 类下。
响应式旨在解决上述 JVM 提供的异步方式的缺点,同时关注了其他一些方面:
reactor 是响应式编程的一种实现。
现代应用程序需要处理大量并发请求并处理大量数据。标准的阻塞代码不再足以满足这些要求。
反应式设计模式是一种基于事件的架构方法,用于异步处理来自单个或多个服务处理程序的大量并发服务请求。
Project Reactor 基于这种模式,并有一个明确而雄心勃勃的目标,即在 JVM 上构建非阻塞、反应式应用程序。
一种生成数据流的方式。包含0-1个结果的异步序列。
Mono.just(1);
另一种生成数据流的方式。包含0-N个结果的异步序列。
Flux.just(1, 2, 3, 4)
生产者-消费者模式?迭代模式?
https://lxdd.gitbook.io/spring-webflux/reactor
Spring WebFlux (project-reactor) 和 RxJava2+ 都是响应式流的实现。 Spring 正在使用 project-reactor,因此它得到了更多的支持、广告和更大的社区,所以用它的人比较多。
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
Project Reactor 是一个通用的反应库。与 RxJava 类似,它基于响应式流规范。它与 Java 8 Stream 和 Optional 类似,不同之处在于它支持异步编程、内置错误处理、支持背压并具有大量运算符(map、filter 等等)。
ReactiveX 结合了观察者模式、迭代器模式和函数式编程的最佳思想。它扩展了观察器模式,以支持数据序列和/或事件,并添加了操作符,允许您以声明的方式将序列组合在一起,同时抽象出诸如低级线程、同步、线程安全、并发数据结构和非阻塞I/O等问题。
一般来说,RxJava 支持基于 JDK8- 的项目,project Reactor 支持 JDK8 +。但是对于初学者来说,你可以先学习 RxJava。Project Reactor 可以弥补 RxJava 的缺点,更适合后端开发。RxJava 有太多的问题,如果你不能很好地使用它,可能会导致内存溢出。但最后,如果你想很好地使用 Spring 5.2+,你需要学习 RxJava->Reactor->NIO->Netty->Reactor Netty。
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