跳到主要内容

快速上手

Doubao 中英对照 Getting Started

目录

本节包含帮助您快速上手 Reactor 的相关信息,包括以下小节:

1. Reactor 简介​

Reactor 是 JVM 上一个完全非阻塞的响应式编程基础,具备高效的需求管理(以管理「背压」的形式体现)。它直接与 Java 8 函数式 API 集成,尤其是 CompletableFuture、Stream 和 Duration。它提供可组合的异步序列 API——Flux(用于 [N] 个元素)和 Mono(用于 [0|1] 个元素)——并广泛实现了 Reactive Streams 规范。

Reactor 还通过 reactor-netty 项目支持非阻塞的进程间通信。reactor-netty 面向微服务架构,提供支持背压的网络引擎,可用于 HTTP(包括 Websockets)、TCP 和 UDP。响应式编码与解码均受完全支持。

2. 前置要求​

Reactor Core 运行于 Java 8 及以上版本。

它对 org.reactivestreams:reactive-streams:1.0.3 存在传递依赖。

备注

Android 支持

  • Reactor 3 并不官方支持或针对 Android(如果这是强烈需求,可以考虑使用 RxJava 2)。

  • 不过,它应当能在 Android SDK 26(Android O)及以上版本上正常工作。

  • 在启用脱糖(desugaring)时,它很可能也能在 Android SDK 21(Android 5.0)及以上版本上正常工作。请参阅 developer.android.com/studio/write/java8-support#library-desugaring

  • 我们愿意尽力评估对 Android 支持有益的改动,但无法做出保证。每个决策都必须逐案做出。

3. 了解 BOM 与版本方案​

Reactor 3 使用 BOM(Bill of Materials,物料清单)模型(自 reactor-core 3.0.4 起,即 Aluminium 发布列车)。这份经过精选的清单将彼此协同良好的构件组合在一起,尽管这些构件可能采用不同的版本方案,也能提供相应的版本号。

请注意,版本方案在 3.3.x 与 3.4.x(Dysprosium 与 Europium)之间发生了变化。

构件采用 MAJOR.MINOR.PATCH-QUALIFIER 的版本方案,而 BOM 则采用受 CalVer 启发的 YYYY.MINOR.PATCH-QUALIFIER 方案,其中:

  • MAJOR 是 Reactor 的当前代际,每一代都可能给项目结构带来根本性变化(这可能意味着更大的迁移工作量)

  • YYYY 是某个发布周期中首个 GA 发布的年份(例如 3.4.x 对应 3.4.0)

  • .MINOR 是从 0 开始编号、随每个新发布周期递增的数字

    • 对于项目而言,它通常反映更广泛的变化,并意味着中等程度的迁移工作量

    • 对于 BOM 而言,它可以在两个发布周期于同一年首次发布时区分它们

  • .PATCH 是从 0 开始编号、随每次服务发布递增的数字

  • -QUALIFIER 是文本限定符,在 GA 发布中省略(见下文)

因此,遵循该约定的第一个发布周期是 2020.0.x,代号为 Europium。该方案按以下顺序使用如下限定符(注意使用短横线分隔符):

  • -M1..-M9:里程碑(我们预计每次服务发布不超过 9 个)

  • -RC1..-RC9:发布候选版本(我们预计每次服务发布不超过 9 个)

  • -SNAPSHOT:快照

  • GA 发布 无限定符

备注

快照在上面的顺序中排在更靠前的位置,因为从概念上讲,它们始终是任一给定 PATCH「最新的预发布版本」。即使一个 PATCH 周期首次部署的构件总是 -SNAPSHOT,一个命名类似但更新的快照也会在例如某个里程碑之后、或在两个发布候选版本之间发布。

每个发布周期还会获得一个代号,延续此前基于代号的方案,可以用更非正式的方式引用它(例如在讨论、博客文章等场合)。代号代表了传统意义上的 MAJOR.MINOR 编号。它们(大多)来自元素周期表,按字母顺序递增排列。

备注

在 Dysprosium 之前,BOM 使用发布列车方案进行版本管理:代号后接限定符,且限定符略有不同。例如:Aluminium-RELEASE(首个 GA 发布,相当于现在的 YYYY.0.0)、Bismuth-M1、Californium-SR1(服务发布相当于现在的 YYYY.0.1)、Dysprosium-RC1、Dysprosium-BUILD-SNAPSHOT(每次补丁之后,我们会回到同一个快照版本,相当于现在的 YYYY.0.X-SNAPSHOT,即每个 PATCH 对应 1 个快照)。

4. 获取 Reactor​

如前文所述,在项目中使用 Reactor 最简单的方式是使用 BOM,并将相关依赖添加到您的项目中。请注意,添加此类依赖时必须省略版本号,以便版本从 BOM 中获取。

不过,如果您想强制使用某个构件的特定版本,可以像往常一样在添加依赖时指定它。您也可以完全不使用 BOM,直接按构件版本号指定依赖。

注意

截至本版本(reactor-core 3.8.2),所属发布列车线中的最新稳定 BOM 是 2025.0.2,下文代码片段使用的就是它。此后可能已有更新的版本(包括快照、里程碑和新的发布列车线),最新构件与 BOM 请参阅 projectreactor.io/docs。

4.1. Maven 安装​

Maven 原生支持 BOM 概念。首先,您需要在 pom.xml 中添加以下片段来导入 BOM:

<dependencyManagement> // <1>
<dependencies>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-bom</artifactId>
<version>2025.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
  • 注意 dependencyManagement 标签。它是对常规 dependencies 部分的补充。

如果您的 pom 中已存在顶层部分(dependencyManagement),则只需添加其内容。

接下来,像往常一样将依赖添加到相关的 reactor 项目,只是不写 <version>,如下所示:

<dependencies>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId> // <1>
// <2>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId> // <3>
<scope>test</scope>
</dependency>
</dependencies>
  • 对核心库的依赖。

  • 此处没有版本标签。

  • reactor-test 提供对响应式流进行单元测试的工具。

4.2. Gradle 安装​

在 5.0 版本之前,Gradle 对 Maven BOM 没有核心支持,但您可以使用 Spring 的 gradle-dependency-management 插件。

首先,从 Gradle 插件门户应用该插件,如下所示:

plugins {
id "io.spring.dependency-management" version "1.0.7.RELEASE" 1
}
  • 在撰写本文时,1.0.7.RELEASE 是该插件的最新版本。请检查更新。

然后使用它导入 BOM,如下所示:

dependencyManagement {
imports {
mavenBom "io.projectreactor:reactor-bom:2025.0.2"
}
}

最后,为您的项目添加一个不带版本号的依赖,如下所示:

dependencies {
implementation 'io.projectreactor:reactor-core' 1
}
  • 第三个以 : 分隔的版本部分不存在。版本从 BOM 获取。

自 Gradle 5.0 起,您可以使用 Gradle 对 BOM 的原生支持:

dependencies {
implementation platform('io.projectreactor:reactor-bom:2025.0.2')
implementation 'io.projectreactor:reactor-core' 1
}
  • 第三个以 : 分隔的版本部分不存在。版本从 BOM 获取。

4.3. 里程碑与快照​

里程碑与发布候选版本通过 Maven Central 分发。

备注

里程碑与发布候选版本仅供测试使用,不建议用于生产环境。

快照通过 Spring Snapshots 仓库分发,而不是 Maven Central。要将其添加到您的构建配置文件中,请使用以下片段(Maven 与 Gradle 均适用):

<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshot Repository</name>
<url>https://repo.spring.io/snapshot</url>
</repository>
</repositories>
repositories {
maven { url 'https://repo.spring.io/snapshot' }
mavenCentral()
}

5. 支持与政策​

5.1. 您有疑问吗?​

提示

先搜索 Stack Overflow;如有必要再发起讨论

如果您不确定为什么某处不工作,或者想知道是否有更好的做法,请先在 Stack Overflow 上查询,必要时再发起讨论。请使用我们为此目的监控的相关标签:

如果您更喜欢实时讨论,我们还有几个 Gitter 频道:

  • reactor 是历史上最活跃的频道,社区中的大多数人都能提供帮助

  • reactor-core 用于围绕库内部工作机制的更深入、更聚焦的讨论

  • reactor-netty 用于 netty 相关的特定问题

其他可能的信息来源,请参阅各项目的 README。

我们通常不建议就问题开启 GitHub issue,而建议使用上述两个渠道。

5.2. 我们关于弃用的政策​

在处理弃用时,对于给定的版本 A.B.C,我们将确保:

  • 在版本 A.B.0 中引入的弃用,将在不早于版本 A。B+1。0 时移除

  • 在版本 A.B.1+ 中引入的弃用,将在不早于版本 A。B+2。0 时移除

  • 我们会尽力在弃用的 javadoc 中注明以下信息:

    • 移除的目标最低版本

    • 指向被弃用方法替代方案的指引

    • 方法被弃用的版本

提示

该政策自 2021 年 1 月起正式生效,适用于 2020.0 BOM 及更新发布列车中的所有模块,以及 Dysprosium-SR15 之后的 Dysprosium 发布。

备注

弃用移除的目标版本并非硬性承诺,被弃用的方法可能会在这些最低目标 GA 版本之后继续存在(也就是说,只有最成问题的被弃用方法才会被积极移除)。

注意

尽管如此,已经超过最低移除目标版本的被弃用代码,可能会在任何后续发布(包括补丁发布,即服务发布)中被移除,而不再另行通知。因此用户仍应尽早更新自己的代码。

5.3. 支持时间线​

关于各个项目的支持日期与 BOM 支持的汇总,请参阅 Reactor Support 页面。