章节摘要:规范落地为库与框架——Rx 家族横跨 JS/JVM/.NET,服务端以 Project Reactor + WebFlux 为主流,数据层靠 R2DBC 与 Reactive Mongo Driver 补全非阻塞 I/O。
| 节 | 覆盖 | 典型选型问题 |
|---|---|---|
| 4.1 | RxJS、RxJava、Rx.NET | 前端 Observable 与后端 Flux 如何对齐 |
| 4.2 | WebFlux、Vert.x、Akka Streams | 网关 vs 事件总线 |
| 4.3 | R2DBC、Kafka Reactive、Redis | 存储与中间件是否真非阻塞 |
画出一条「浏览器 RxJS → WebFlux → R2DBC → PostgreSQL」链路,并标出每跳背压如何传递。
技术生态章最容易陷入「哪个框架更快」的比稿陷阱。正确的打开方式是按链路分层看:
「前端 RxJS → WebFlux → R2DBC」这条链路里,背压只在 WebFlux 与 R2DBC 之间有规范意义上的 request 传导;浏览器到服务端之间靠 SSE/WebSocket 传输,只能做窗口级流控。画链路时给每一跳标注「背压是否真传导」,比记一堆框架名有用得多。
读完三节后你应该能回答三个统一的问题:
| 层 | 关键判断 |
|---|---|
| 前端 | 操作符(map/flatMap/switchMap)语义是否与后端一致? |
| 服务端 | 运行时是否非阻塞 + 规范合规? |
| 数据层 | 驱动是否真流式,还是 Mono 包阻塞? |
这三个问题贯穿全章:生态选型的本质,是把「响应式契约」从一层蔓延到全链路,并审计每一跳是否真的兑现了契约。
把第 4 章的知识整合成一张分层图,按「层 → 代表实现 → 核心机制 → 常见坑」组织:
| 层 | 代表实现 | 核心机制 | 常见坑 |
|---|---|---|---|
| 前端 | RxJS 7+ | 操作符管道 | 无原生背压 |
| 服务端 | Reactor/WebFlux、Vert.x、Akka | 非阻塞 I/O + RS | 阻塞驱动混入 |
| 数据 | R2DBC、Mongo、Lettuce | RS Publisher | 驱动成熟度不均 |
| 消息 | Reactor Kafka | 批次 + ack | max.poll.records 过大 |
// 团队已用 Spring Boot 3 + PostgreSQL → 推荐栈 // 前端: RxJS(已有) // 网关/API: WebFlux + Netty // 数据: R2DBC PostgreSQL(较成熟) // 消息: Reactor Kafka // Redis: Lettuce // 每一跳都有明确机制,链路完整无阻塞
选型的顺序建议是「先锁数据层,再选服务端,最后补前端」——因为数据层是瓶颈最集中的地方,Oracle 无 R2DBC 这类限制会反向决定上层框架。第 4 章三节正是按这个顺序展开的:4.1 前端、4.2 服务端、4.3 数据层。
画一条真实链路(建议用你工作中实际的技术栈),逐跳标注:传输协议、元素形态(对象/流)、背压机制、错误传递方式。完成后对照下表自查:
这个练习比读十遍文档都有效——它强迫你把 4.1-4.3 的散点知识组织成一张可审计的架构图。