3.1 Processor:Subscriber 与 Publisher 的桥接
实现 MapProcessor<T,R>:同时扮演上游 Subscriber 与下游 Publisher。重点解决下游先订阅时 request 丢失的 pending demand 问题、cancel 双向上传播、终止信号只发一次,以及 mapper 抛异常时先取消上游再通知下游的顺序。附两个订阅顺序的实测与三条 Processor 专项规则。
tag
实现 MapProcessor<T,R>:同时扮演上游 Subscriber 与下游 Publisher。重点解决下游先订阅时 request 丢失的 pending demand 问题、cancel 双向上传播、终止信号只发一次,以及 mapper 抛异常时先取消上游再通知下游的顺序。附两个订阅顺序的实测与三条 Processor 专项规则。
实现三个有代表性的 Subscriber:LoggingSubscriber、逐元素请求的 CountingSubscriber 和批量消费的 BatchingSubscriber。按 §2.1(用 request 表达需求)、§2.7(request/cancel 串行)、§2.8(cancel 后可能有迟到元素)、§2.3(终止回调不得操作 Subscription)逐条落实,并指出「synchronized 不等于信号串行」和「onComplete 里再 request」两个真实 bug。
实现带背压的异步 Publisher——AsyncRangePublisher:用饱和加法累加 request、用 CAS 扣减额度、用 done 标志保证终止信号只发一次,并解释为什么必须用单线程 Executor 保证信号串行。给出完整实现、取消与空范围测试,以及三个容易写错的并发细节。
从零实现符合 Reactive Streams 规范的最小同步 Publisher:SyncSinglePublisher。逐行剖析 subscribe 的 onSubscribe 时序(§1.9)、request 的额度与非法值处理(§1.1、§3.9)、终止后的信号禁令(§1.7)与 cancel 语义(§3.12),并给出编译运行、边界测试和常见错误写法。
按 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 的真实测试方法名。
拆解 Reactive Streams 的四个核心接口 Publisher、Subscriber、Subscription、Processor 的定义、职责与交互时序;说明 org.reactivestreams 与 JDK 9 Flow 的语义等价但类型不兼容,给出双向适配器;澄清 onSubscribe 时序、重复订阅、null 元素与 request/cancel 串行化四个高频误解。
从同步阻塞到回调函数,从 Future/Promise 到 CompletableFuture 链式编排,再到 Stream 的惰性求值,逐层分析每种异步模型的能力与边界,引出「推模型没有刹车」这一根本矛盾,说明为什么需要 Reactive Streams 的 request-pull 混合模型来解决速率不匹配问题。
本书前言:说明读者画像与前置知识,给出环境清单(JDK 25 + Reactor BOM 2025.0.8 + RxJava 3.1.12 + RS TCK 1.0.4),搭建 eventd-v1 多模块 Maven 骨架,约定代码风格、编译命令与验证方式,并列出全部依赖版本与真实输出供读者核对。
本序从回调地狱的三宗罪出发,说明为什么 Promise 和 CompletableFuture 都无法解决根本问题,引出 Reactive Streams 规范作为信号契约的诞生背景;同时声明三卷分工与本书边界——不写 Netty 源码、不写 Spring WebFlux 配置、不写 Kafka Streams 拓扑。
《Java 响应式编程·Reactive Streams 与背压原理》全书 50 篇目录页:14 章 42 节覆盖 RS 规范、从零实现 Publisher、Project Reactor 核心(Mono/Flux/操作符/调度器)、背压四大策略、Hot 与 Cold 多播、RxJava 3 对照、RS TCK 合规测试,最后以 eventd v1 背压演示系统验收。另含序、前言与五份附录。
《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 源码沉底。