快速上手
目录
本节包含帮助您开始使用 Reactor Netty 的相关信息,内容如下:
1. 介绍 Reactor Netty
Reactor Netty 面向微服务架构,提供具备背压能力的网络引擎,支持 HTTP(含 Websocket)、TCP 和 UDP。
2. 前提条件
Reactor Netty 运行于 Java 8 及以上版本。
它具有以下传递依赖:
-
Reactive Streams v1.0.4
-
Reactor Core v3.x
-
Netty v4.2.x
3. 理解 BOM 与版本方案
Reactor Netty 是 Project Reactor BOM 的一部分(自 Aluminium 发布列车起)。这份精心整理的清单将彼此协同良好的制品归组在一起,尽管这些制品各自的版本方案可能不同,清单仍会提供对应的版本。
版本方案在 0.9.x 与 1.0.x(Dysprosium 与 Europium)之间发生了变化。
制品采用 MAJOR.MINOR.PATCH-QUALIFIER 的版本方案,而 BOM 则采用受 CalVer 启发的 YYYY.MINOR.PATCH-QUALIFIER 方案进行版本编号,其中:
-
MAJOR是 Reactor 的当前世代,每个新世代都可能为项目结构带来根本性变更(这可能意味着需要较大的迁移工作量) -
YYYY是某一发布周期中首个 GA 发布的年份(如 1.0.x 对应 1.0.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 Netty
如前所述,在您的核心中使用 Reactor Netty 的最简单方式是使用 BOM 并将相关依赖添加到您的项目中。请注意,添加此类依赖时必须省略版本号,以便版本从 BOM 中获取。
不过,如果您想强制使用某个特定制品的版本,可以像往常一样在添加依赖时指定它。您也可以完全不用 BOM,直接按制品版本来指定依赖。
4.1. Maven 安装
Maven 原生支持 BOM 概念。首先,您需要通过将以下片段添加到 pom.xml 来导入 BOM。如果您的 pom 中已存在顶层部分(dependencyManagement),则只需添加其内容。
<dependencyManagement> // <1>
<dependencies>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-bom</artifactId>
<version>2025.0.0-RC1</version> // <2>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注意
dependencyManagement标签。它是对常规dependencies部分的补充。在撰写本文时,
2025.0.0-RC1是BOM的最新版本。请在 github.com/reactor/reactor/releases 检查更新。
接下来,像往常一样将依赖添加到相关的 reactor 项目中(只是不指定 <version>)。以下清单展示了如何操作:
<dependencies>
<dependency>
<groupId>io.projectreactor.netty</groupId>
<artifactId>reactor-netty-core</artifactId> // <1>
// <2>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>io.projectreactor.netty</groupId>
<artifactId>reactor-netty-http</artifactId>
</dependency>
</dependencies>
对
Reactor Netty的依赖此处没有 version 标签
4.2. Gradle 安装
Gradle 自 5 版本起支持 BOM 概念。以下清单展示了如何导入 BOM 并为 Reactor Netty 添加依赖:
dependencies {
// import a BOM
implementation platform('io.projectreactor:reactor-bom:2025.0.0-RC1') 1
// define dependencies without versions
implementation 'io.projectreactor.netty:reactor-netty-core' 2
implementation 'io.projectreactor.netty:reactor-netty-http'
}
在撰写本文时,
2025.0.0-RC1是BOM的最新版本。请在 github.com/reactor/reactor/releases 检查更新。没有第三个以
:分隔的版本部分。版本取自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 上搜索,并在必要时发起讨论。请使用我们为此目的监控的相关标签之一:
-
reactor-netty 用于特定的 reactor-netty 问题
-
project-reactor 用于一般性的 reactor 问题
如果您更喜欢实时讨论,我们还设有几个 Gitter 频道:
-
reactor 是历史上最活跃的频道,社区中大多数人都能在此提供帮助
-
reactor-core 用于围绕库内部工作机制开展更深入、更聚焦的讨论
-
reactor-netty 用于 netty 相关的特定问题
有关其他可能的信息来源,请参阅各项目的 README。
我们通常不建议通过 GitHub issues 提出问题,而是建议使用上述两个频道。
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 页面。