Java 中的反应式编程 (RxJava)_java反射应用
大家好。 在本文中,我们将学习 Reactive Java (RX Java)
但是在开始之前,您可以阅读我下面的文章以了解 什么是响应式编程
响应式 Java 库
响应式编程已经发展了很多,Java 也是如此。 Java 中的响应式编程有很多发展,以下是用 Java 编写的著名的响应式库
- RxJava :如上一篇文章所述, ReactiveX 的最佳思想的结合 (RX) 是观察者 模式、 迭代器 模式和 函数式编程 。 RxJava 只不过是 RX 的 Java 实现。
- Project Reactor 的公司 Pivotal 构建的框架 :Project Reactor 是由开发了Spring Boot 。 Project Reactor 实现了基于 Reactive Streams 规范的 Reactive API 模式。
- Akka Streams actor之上 :被认为是第三代 Reactive 库,Akka streams API 与 Reactive Streams 接口完全解耦,它构建在Akka 以处理流数据。
- Ratpack :Ratpack 只不过是一组用于构建可扩展应用程序的 Java 库。 Ratpack 使用响应式原理以及 Java 8 和 Netty 来提供响应式流 API 的基本实现。
- Vert.x 编写的事件驱动框架 为JVM : Eclipse 基金会 。 Vert.x 是 多语言事件驱动框架,它允许 RxJava 或其本机 Reactive Streams API 实现。
RxJava
RxJava 是 ReactiveX 的 Java VM 实现,它是使用 Observable 序列实现同步和基于事件的编程的库。 它从开发人员那里抽象出低级线程、线程安全、 同步 、并发等内容,使开发更容易。
RxJava 的构建块是 Observables 和 Subscribers 。 Observable 用于生产事件,而 Subscriber 用于消费事件。
依赖关系
我们可以通过maven依赖使用RxJava如下
io.reactivex
rxjava
${rx.java.version}
在撰写本文时,最新版本的 Rx Java 是 3.1.5
请通过此链接了解有关 RxJava 的更多信息
https://github.com/ReactiveX/RxJava
Java 9 反应流 API
反应流规范
Reactive Streams 规范是 Reactive Manifesto 的一部分,在上一篇文章中已经讨论过。 它是一个标准化非阻塞反压机制的异步流处理的规范
Reactive Streams API 是 Reactive Streams 的 Java 实现,它是在 Java 9 中引入的。Reactive Streams API 与 Rx Java 非常相似,但也存在一些差异。
如上所示,Rx Java 需要作为单独的依赖项添加,但 Reactive Streams API 从 Java 9 开始内置在内部。 Rx Java API 在缓冲区管理、错误处理和背压策略方面具有更多功能 与 Java 9 Reactive Streams API 相比, 。 可以根据用例使用其中的任何一个。
Reactive Streams API 基于 生产者-消费者模型 ,它有四个接口,即
- 发布者 :发布者是创建数据并将其发送给一个或多个订阅者的人
公共接口发布者 {
public void subscribe(Subscriber super T> s);
}
- 订阅者:订阅者将接收发布者发布的数据并处理这些消息。 它充当 Streams API 中的终端操作员。 它有如下所示的 4 个方法,该接口的每个实现都将实现这 4 个方法
公共接口订户 {
public void onSubscribe(Subscription s);
public void onNext(T t);
public void onError(Throwable t);
public void onComplete();
}
- 订阅 :这只不过是发布者和订阅者之间的关系,它有以下两种方法
公共接口订阅{
公共无效请求(long n);
公共无效取消();
}
- Processor : 代表一个处理阶段,由 Publisher 和 Subscriber 组成
public interface Processor extends Subscriber, Publisher {
}
Java 8 Streams API 与 Java 9 Reactive Streams API
Java 8 Streams API 在拉模型上工作,而 Java 9 Reactive Streams 在推模型上工作。 事件一个接一个地推送给订阅者。
就 Java Streams API 8 而言,终端运算符返回结果并且流是有限的。 在 Reactive Streams 的情况下,可能有来自外部源的无限数据流,我们可以有多个订阅者连接到它。
项目反应堆
Project Reactor 是一个反应式库,它是完全非阻塞的,包括反压支持。 等项目中具有特色 它是 Spring 生态系统中反应堆栈的基础,并且在Spring WebFlux 、 Spring Data 和 Spring Cloud Gateway 。
就像 Java 8 Stream 和 Optional,除了它支持异步编程,错误处理是内置的,支持背压,并且有大量的操作员。
WebFlux 是 Spring 的响应式堆栈 Web 框架,需要 Reactor 作为核心依赖项。
在本文中,我们看到有很多选项可以在 Java 中使用反应式编程,包括 Rx Java 和 Java 9 Reactive Streams API。 使用 Spring Framework 时,最好使用 Spring Webflux(它使用 Project Reactor),因为它与整个生态系统集成,如 Spring Boot、Spring Cloud 等。 它具有更多功能,并且可以更快地学习和实施。 在下一篇文章中,我们将通过示例了解 Spring Webflux 和 R2DBC
感谢您的阅读和关注!!!!