posts

《Java 响应式编程·Reactive Streams 与背压原理》· 全书目录与章节索引(50 篇)

《Java 响应式编程·Reactive Streams 与背压原理》全 50 篇:从 Reactive Streams 规范、自实现 Publisher/Subscriber/Processor,到 Project Reactor 核心(Mono/Flux/调度器/背压策略)、Hot 与 Cold 多播、RxJava 3 对照、RS TCK 合规测试,最后以 eventd v1 背压演示系统验收。纯 JDK 25 + Project Reactor BOM 2025.0.8(reactor-core 3.8.8),不含 Spring WebFlux 或 Netty 源码沉底。

全书概览

项目内容
书稿《Java 响应式编程·Reactive Streams 与背压原理》
篇数50 篇(14 章 42 节 + 序、前言、目录 + 附录 A–E)
领域Reactive Streams 规范实现、Project Reactor 核心、背压原理、RS TCK 合规验证
贯穿项目eventd-v1 —— 自实现 RS Publisher → Project Reactor 重写 → 背压演示系统
阅读方式从目录篇 进入按顺序通读,或按机制跳读
主线版本JDK 25 LTS(Temurin 25.0.5+8)、Project Reactor BOM 2025.0.8、RxJava 3.1.12
关键依赖reactor-core 3.8.8(BOM 2025.0.8)、rxjava 3.1.12、reactive-streams-tck 1.0.4
上级专题书稿专题

三卷分工

卷书名关注点
卷一《Java 响应式编程·Reactive Streams 与背压原理》RS 规范、Reactor 核心、背压策略、RS TCK 合规
卷二《Java 响应式编程·系统构建与数据访问》Reactor Netty、WebFlux、R2DBC、响应式安全与测试
卷三《Java 响应式编程·流处理引擎与实时计算》Kafka Streams、Flink DataStream、窗口、CEP

本卷不展开 Reactor Netty/WebFlux(留给卷二),不展开 Kafka Streams/Flink(留给卷三)。需要时写「卷二第 N 章」「卷三第 N 章」。

全书目录

前置

篇文章核心内容
序序:从回调地狱到背压契约回调地狱三宗罪、RS 规范的诞生、三卷分工、本书不承诺什么
前言前言:环境、项目与读法读者对象、前置知识、环境清单、eventd-v1 骨架、代码约定
目录目录与学习路径三条学习路径、三卷衔接、章节索引

第一部分:Reactive Streams 规范(第 1 章)

节文章核心内容
1.1异步编程的演进回调、Promise/Future、CompletableFuture 的局限;为什么需要「流」
1.2Reactive Streams 规范:四个接口Publisher/Subscriber/Subscription/Processor;43 条规则概述
1.3规范规则逐条分析onSubscribe 先调用、request 信号、onNext 与 request 关系、取消与完成、空 Publisher

第二部分:从零实现 Publisher(第 2–3 章)

节文章核心内容
2.1同步 Publisher 最小实现单值同步 Publisher、标准 subscribe 流程、request(n) 同步响应
2.2异步 Publisher 与背压信号异步生产、Subscription 内 request 累积、Executor 调度、取消传播
2.3Subscriber 实现与信号契约onSubscribe 内保存 Subscription、request 与 cancel 线程安全、onNext 不阻塞
3.1Processor:Subscriber 与 Publisher 的桥接Processor 同时实现两者;桥接场景(编码转换、日志、指标)
3.2操作符链:map、filter、take懒订阅、每个操作符返回新 Publisher、request 信号转发与变换
3.3调度切换:subscribeOn 与 publishOn订阅线程 vs 发射线程;Executor 作为调度器;信号不能乱序

第三部分:Project Reactor 核心(第 4–7 章)

节文章核心内容
4.1Mono 与 Flux:零个、一个与多个元素Mono(0|1)、Flux(0..N)、创建操作符、空与错误
4.2转换操作符:map、flatMap、concatMap同步变换 vs 异步展开;flatMap 合并无序、concatMap 顺序保证
4.3组合操作符:zip、merge、combineLatest配对发射 vs 先 emit 先赢 vs 最新值组合;空流与错误传播
5.1错误处理:onErrorReturn、onErrorResume、retry错误恢复策略、重试次数与退避、retryWhen 与 Repeat 区别
5.2指数退避重试与熔断信号retryWhen 配合 Flux.interval、固定退避 vs 指数退避
5.3超时与取消传播timeout(Duration) 语义、取消信号向上游传播、doOnCancel 钩子
6.1调度器:单线程、弹性、并行与立即Schedulers.single/elastic/parallel/immediate;线程名与线程数边界
6.2BoundedElastic 与线程池模型有界弹性调度器(线程上限、队列、TTL);与 ExecutorService 的关系
6.3自定义调度器与 Worker 模型Scheduler.Worker 生命周期、任务排队、取消粒度
7.1背压策略:BufferonBackpressureBuffer() 无界/有界队列、溢出策略、钩子
7.2背压策略:Drop Latest 与 Drop OldestonBackpressureDrop / onBackpressureLatest 语义;丢元素回调
7.3背压策略:Error 与请求发射速率控制onBackpressureError、limitRate(n)、limitRequest(n);请求批量化

第四部分:Hot 与 Cold、Sinks、多播(第 8–10 章)

节文章核心内容
8.1Cold Publisher:每次订阅重放创建即启动 vs 订阅即启动;多次订阅独立数据流
8.2Hot Publisher:广播与共享publish().refCount()、share();late subscriber 只能收到后续元素
8.3refCount、autoConnect 与 cacherefCount(n)、autoConnect(n)、cache 的内存与重放权衡
9.1Sinks:程序化发射数据Sinks.many().unicast/multicast/replay;线程安全发射;失败类型
9.2Sinks 多播:背压与重放multicast().onBackpressureBuffer / .directBestEffort;重放缓存大小限制
9.3Sinks 重放:大小与时间限制replay().limit(n) / .limit(Duration) / .latest();内存管理与失效策略
10.1RxJava Subject:与 Sinks 的对照PublishSubject、BehaviorSubject、ReplaySubject、AsyncSubject
10.2ConnectableObservable 与 connectRxJava 的 publish + connect / refCount;与 Reactor ConnectableFlux 对照
10.3RxJava 3 与 Reactor 的迁移对照API 映射表、共同陷阱、何时选哪个库

第五部分:RS TCK 测试与合规验证(第 11 章)

节文章核心内容
11.1RS TCK:测试环境搭建PublisherVerification/SubscriberVerification/IdentityProcessorVerification
11.2Publisher 合规测试38 个用例(22 个 required);信号顺序、背压、空 Publisher、异步完成
11.3Subscriber 与 Processor 合规测试SubscriberWhitebox/Blackbox、IdentityProcessorVerification

第六部分:调试与生命周期(第 12 章)

节文章核心内容
12.1生命周期钩子:doOn* 系列doOnSubscribe/doOnNext/doOnError/doOnComplete/doOnCancel/doOnRequest
12.2调试技术:Hooks 与检查点Hooks.onOperatorDebug、checkpoint 订阅点追踪、性能代价
12.3装配时 vs 订阅时操作符链是蓝图、订阅才是启动;多次订阅多次执行

第七部分:eventd v1 验收(第 13–14 章)

节文章核心内容
13.1eventd v1 架构与模块划分eventd-core(RS 实现)、eventd-app(背压演示 App)、模块依赖
13.2传感器模拟器:带背压的随机数据流SensorSimulatorPublisher:Poisson 到达、可配置速率、request(n) 响应
13.3背压演示面板:请求率 vs 消费率BackpressureDashboard:统计 request 累积、onNext 处理时间、buffer/drop 数量
14.1用 Project Reactor 重写 eventd同一套业务逻辑:Flux.create + BoundedElastic + onBackpressureBuffer
14.2eventd v1 性能基线吞吐量(元素/秒)、延迟分布(p50/p99)、不同背压策略资源占用
14.3v1 验收:RS 合规、背压可观测、文档TCK 全绿、三种背压策略演示、模块 README

附录

附录文章核心内容
AReactor/RxJava 操作符速查分类表(创建/变换/组合/错误/背压/工具)、操作符对照、适用场景
B调度器选择指南四种场景 → 推荐调度器 → 反例
C背压规则清单RS 规范背压相关规则逐条 + Reactor 实现映射
D从 CompletableFuture 到响应式流迁移指南CompletableFuture → Mono/Flux 映射、常见陷阱、何时不要迁移
ERS TCK 测试方法参考PublisherVerification/SubscriberVerification 全部方法列表

与站内已有内容的边界

全部文章 Books game Java Indie golang 客户端开发 Minigame Saas rust Python
java

2.3 Subscriber 实现与信号契约

实现三个有代表性的 Subscriber:LoggingSubscriber、逐元素请求的 CountingSubscriber 和批量消费的 BatchingSubscriber。按 §2.1(用 request 表达需求)、§2.7(request/cancel 串行)、§2.8(cancel 后可能有迟到元素)、§2.3(终止回调不得操作 Subscription)逐条落实,并指出「synchronized 不等于信号串行」和「onComplete 里再 request」两个真实 bug。

6 分钟阅读
书稿 Java 响应式编程
java

1.3 规范规则逐条分析

按 Reactive Streams 1.0.4 官方编号逐条梳理 43 条规则:§1 Publisher(1.1–1.11)、§2 Subscriber(2.1–2.13)、§3 Subscription(3.1–3.17)、§4 Processor(4.1–4.2),给出完整速查表,并深入拆解 1.1 的 happens-before、1.9/2.12/2.5 的订阅语义、2.3 的终止回调禁令、2.8 的 cancel 延迟、3.2/3.3 的同步递归上限与 3.9/3.17 的请求边界,最后对应到 TCK 的真实测试方法名。

9 分钟阅读
书稿 Java 响应式编程
java

《Java 响应式编程·Reactive Streams 与背压原理》目录与学习路径

《Java 响应式编程·Reactive Streams 与背压原理》全书 50 篇目录页:14 章 42 节覆盖 RS 规范、从零实现 Publisher、Project Reactor 核心(Mono/Flux/操作符/调度器)、背压四大策略、Hot 与 Cold 多播、RxJava 3 对照、RS TCK 合规测试,最后以 eventd v1 背压演示系统验收。另含序、前言与五份附录。

11 分钟阅读
书稿 Java 响应式编程