前言:环境、项目与读法

卷二所需环境与版本:JDK 25、Maven 3.9、Reactor BOM 2025.0.8、R2DBC PostgreSQL、Caffeine Async、Lettuce Reactive。介绍贯穿项目 eventd v2 的模块结构(gateway/api/data/monitor/resilience/saga)以及三种阅读路径。

环境准备

必须版本

组件版本说明
JDKTemurin 25.0.5+8--release 25
Maven3.9.12标准构建
Project Reactor2025.0.8 BOMreactor-core 3.8.8、reactor-netty 1.3.8
R2DBC PostgreSQL1.0.x响应式 JDBC 替代
Caffeine3.1.x异步缓存
Lettuce6.5.xRedis Reactive 客户端

验证 JDK:

java -version
# openjdk version "25.0.5" 2026-10-14
# OpenJDK Runtime Environment Temurin-25.0.5+8 (build 25.0.5+8)
mvn -v
# Apache Maven 3.9.12

Maven BOM

eventd-v2/pom.xml 的依赖管理:

<properties>
    <maven.compiler.release>25</maven.compiler.release>
    <reactor.version>2025.0.8</reactor.version>
    <r2dbc-postgresql.version>1.0.7.RELEASE</r2dbc-postgresql.version>
    <caffeine.version>3.1.8</caffeine.version>
    <lettuce.version>6.5.1.RELEASE</lettuce.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-bom</artifactId>
            <version>${reactor.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- Reactor Netty -->
    <dependency>
        <groupId>io.projectreactor.netty</groupId>
        <artifactId>reactor-netty-http</artifactId>
    </dependency>
    <!-- R2DBC -->
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>r2dbc-postgresql</artifactId>
        <version>${r2dbc-postgresql.version}</version>
    </dependency>
    <!-- Cache -->
    <dependency>
        <groupId>com.github.ben-manes.caffeine</groupId>
        <artifactId>caffeine</artifactId>
        <version>${caffeine.version}</version>
    </dependency>
    <dependency>
        <groupId>io.lettuce</groupId>
        <artifactId>lettuce-core</artifactId>
        <version>${lettuce.version}</version>
    </dependency>
    <!-- Test -->
    <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

Spring WebFlux 仅在第 4–6 章使用,会在对应章节引入 spring-webflux 与 spring-boot-starter-webflux(Spring Boot 3.5.x;3.5.16 的系统要求为 Java 17–25,与本书 JDK 25 对齐,3.4.x 不支持 JDK 25)。其余章节保持纯 Reactor + R2DBC 堆栈,避免容器复杂度干扰网络与数据层的讨论。

贯穿项目:eventd v2

卷一实现了基于内存的 SyncSinglePublisher 与 BackpressureDashboard,验证了 RS 规范与背压原理。卷二将其升级为完整的 HTTP 服务。

模块划分

eventd-v2/
├── eventd-gateway          # Reactor Netty HTTP/WebSocket 网关
│   └── 路由表、协议转换、连接管理
├── eventd-api              # WebFlux 接口层
│   └── 注解路由、函数式路由、过滤器、安全
├── eventd-data             # R2DBC + 缓存
│   └── PostgreSQL 交互、事务、Caffeine Async、Redis Reactive
├── eventd-monitor          # 第 10 章引入:指标、追踪、结构化日志
├── eventd-resilience       # 第 11 章引入:负载均衡、熔断、限流
└── eventd-saga             # 第 12 章引入:事件总线与 Saga 编排

前三个模块从第 1 章开始使用;监控、弹性、Saga 模块随对应章节逐步加入,避免一开始就引入尚未讲到的依赖。

端口约定

服务端口协议
eventd-gateway8080HTTP/1.1、WebSocket
PostgreSQL(eventd-data 使用)5432R2DBC
Redis6379RESP

开发时可以通过 docker-compose.yml 启动 PostgreSQL 与 Redis:

services:
  postgres:
    image: postgres:17
    environment:
      POSTGRES_DB: eventd
      POSTGRES_USER: eventd
      POSTGRES_PASSWORD: eventd
    ports:
      - "5432:5432"
  redis:
    image: redis:7
    ports:
      - "6379:6379"

每个章节的可运行代码都假设 eventd 数据库已创建。

与卷一的关系

卷一能力卷二对应
Publisher.subscribe()HttpServer.handle() 中创建 Flux/Mono
Subscription.request(n)TCP 接收窗口、HTTP 响应的 writeWith() 背压
onNext/onError/onCompleteWebFlux 请求管线中的信号传递
背压策略选择HTTP 层与 R2DBC 查询结果流的联合背压

三种读法

路径 A:顺序通读(推荐给卷一读者)

  1. 第 1–3 章:Reactor Netty 最小服务器 → 请求管线 → 背压
  2. 第 4–6 章:WebFlux 路由 → 请求响应体 → 安全与测试
  3. 第 7–9 章:R2DBC 驱动 → 事务 → 缓存
  4. 第 10–12 章:监控 → 弹性 → 全链路集成
  5. 第 13–14 章:测试 → 验收

路径 B:有 WebFlux 经验,想深入底层

跳过第 4–6 章,从第 1 章(Reactor Netty)或第 7 章(R2DBC)开始。重点看:

  • 第 1–3 章:HTTP 层的背压、WebSocket 广播、网关路由
  • 第 9 章:Caffeine Async 与 Redis Reactive 的桥接
  • 第 10–12 章:响应式系统的监控与弹性模式
  • 第 13 章:StepVerifier、Testcontainers、JMH

路径 C:只想看可运行代码

  1. 前言(本页)→ 确认环境
  2. 第 3 章(eventd v2 网关架构)→ 理解整体
  3. 第 9 章(缓存)→ 看 Caffeine Async + Redis
  4. 第 12 章(全链路集成)→ 端到端可运行
  5. 附录 A(Netty 配置速查)→ 查配置

一个前置提醒

本机环境为 Apple M1 Pro, macOS 26.3。Reactor Netty 会优先使用平台原生的传输实现(macOS 上是 KQueue,Linux 上是 Epoll),native 库不可用时回退到 NIO。书中示例保持平台无关;部署到 Linux 时,通过 LoopResources/HttpResources 选择原生传输即可,业务代码不变。

Kafka Streams 与 Flink 的内容属于卷三,卷二仅在网关层使用 HTTP 与 WebSocket,不涉及消息队列消费。

环境就绪后,从最小 HTTP 服务器开始:第 1 章第 1 节 Reactor Netty 最小 HTTP 服务器 。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「java」更多文章

  1. 15.3 全书总结与学习路径回顾
  2. 15.2 响应式流处理的演进趋势
  3. 15.1 引擎选型指南