当下激烈的市场竞争导致企业对高响应性系统的需求不断增加,这对开发人员的响应式编程技术提出了新的要求。《Spring响应式编程》深入浅出,从响应式系统的基本原理入手,详尽地介绍了响应式系统的优势和应用方向。同时,本书借助Spring框架及WebFlux等工具,对响应式编程进行了极具实践性的指导。此外,本书还引入了Project Reactor这一响应式编程利器。在完成对本书的学习后,你将有能力利用这些工具,构建响应式系统。
本书适合有志于学习响应式编程的程序员和需要构建响应式系统的开发人员阅读。
·Project Reactor和Spring框架重要贡献者力作
·深入剖析响应式编程及其框架底层原理
·代码详实、图文并茂,展现系统构建的高级解决方案
在学习本书后,你将能够运用自己的技能,加入Spring 5带来的响应式变革!阅读本书,你将:
- 发现响应式系统和响应式编程之间的区别
- 探索响应式系统的优势并了解其应用
- 掌握Spring 5中的响应式编程
- 了解Project Reactor
- 使用Spring 5和Project Reactor构建响应式系统
奥莱·多库卡(Oleh Dokuka)
资深软件工程师,Pivotal公司Java Champion,作为Project Reactor和Spring框架的重要贡献者,熟悉其内部机制,并提倡使用Project Reactor进行日常响应式编程。他经常在软件开发中实际应用Spring框架和Project Reactor,非常了解使用这些技术构建响应式系统的方法。
伊戈尔?洛兹恩斯基(Igor Lozynskyi)
资深Java开发人员,拥有约10年的Java平台经验,主要致力于开发可靠、可伸缩且速度极快的系统,热衷于打理生活和软件开发中总在变化的项目。
第 1 章 为什么选择响应式 Spring 1
1.1 为什么需要响应性 1
1.2 响应性应用案例 6
1.3 为什么采用响应式 Spring 9
1.4 小结 16
第 2 章 Spring 响应式编程—— 基本概念 17
2.1 Spring 的早期响应式解决方案 17
2.1.1 观察者模式 18
2.1.2 观察者模式使用示例 20
2.1.3 基于@EventListener 注解的发布订阅模式 23
2.1.4 使用@EventListener 注解构建应用程序 24
2.2 使用 RxJava 作为响应式框架 31
2.2.1 观察者加迭代器等于响应式流 31
2.2.2 生产和消费流数据 33
2.2.3 生成异步序列 35
2.2.4 流转换和弹珠图 36
2.2.5 RxJava 的先决条件和优势 39
2.2.6 使用 RxJava 重建我们的应用程序 41
2.3 响应式库简史 45
2.4 响应式现状 46
2.5 小结 48
第 3 章 响应式流——新的流标准 49
3.1 无处不在的响应性 49
3.1.1 API 不一致性问题 49
3.1.2 “拉”与“推” 52
3.1.3 流量控制问题 56
3.1.4 解决方案 60
3.2 响应式流规范基础知识 60
3.2.1 响应式流规范实战 66
3.2.2 响应式流技术兼容套件 71
3.2.3 JDK 9 77
3.3 高级主题——响应式流中的异步和并行 79
3.4 响应式环境的转变 81
3.4.1 RxJava 的转变 81
3.4.2 Vert.x 的调整 83
3.4.3 Ratpack 的改进 84
3.4.4 MongoDB 响应式流驱动程序 85
3.4.5 响应式技术组合实战 86
3.5 小结 89
第 4 章 Project Reactor——响应式 应用程序的基础 90
4.1 Project Reactor 简史 90
4.1.1 Project Reactor 1.x 版本 91
4.1.2 Project Reactor 2.x 版本 93
4.2 Project Reactor 精髓 94
4.2.1 在项目中添加 Reactor 96
4.2.2 响应式类型——Flux 和 Mono 96
4.2.3 创建 Flux 序列和 Mono 序列 100
4.2.4 订阅响应式流 102
4.2.5 用操作符转换响应式序列 105
4.2.6 以编程方式创建流 119
4.2.7 错误处理 125
4.2.8 背压处理 127
4.2.9 热数据流和冷数据流 127
4.2.10 处理时间 131
4.2.11 组合和转换响应式流 131
4.2.12 处理器 133
4.2.13 测试和调试 Project Reactor 134
4.2.14 Reactor 插件 134
4.3 Project Reactor 的高级主题 135
4.3.1 响应式流的生命周期 135
4.3.2 Reactor 中的线程调度模型 140
4.3.3 Project Reactor 内幕 149
4.4 小结 153
第 5 章 使用 Spring Boot 2 实现响应性 154
5.1 快速启动是成功的关键 154
5.1.1 使用 Spring Roo 尝试更快 地开发应用程序 156
5.1.2 Spring Boot 是快速增长的 应用程序的关键 156
5.2 Spring Boot 2.0 中的响应式 157
5.2.1 Spring Core 中的响应式 157
5.2.2 响应式 Web 160
5.2.3 响应式 Spring Data 162
5.2.4 响应式 Spring Session 163
5.2.5 响应式 Spring Security 163
5.2.6 响应式 Spring Cloud 163
5.2.7 响应式 Spring Test 164
5.2.8 响应式监控 164
5.3 小结 165
第 6 章 WebFlux 异步非阻塞通信 166
6.1 WebFlux 作为核心响应式服务器基础 166
6.1.1 响应式 Web 内核 169
6.1.2 响应式 Web 和 MVC 框架 171
6.1.3 基于 WebFlux 的纯函数式Web 174
6.1.4 基于 WebClient 的非阻塞 跨服务通信 178
6.1.5 响应式 WebSocket API 181
6.1.6 作为 WebSocket 轻量级 替代品的响应式 SSE 184
6.1.7 响应式模板引擎 186
6.1.8 响应式 Web 安全 188
6.1.9 与其他响应式库的交互 191
6.2 对比 WebFlux 和 Web MVC 192
6.2.1 比较框架时的定律 192
6.2.2 全面分析和比较 199
6.3 WebFlux 的应用 216
6.3.1 基于微服务的系统 216
6.3.2 处理客户端连接速度慢的系统 217
6.3.3 流或实时系统 217
6.3.4 WebFlux 实战 217
6.4 小结 221
第 7 章 响应式数据库访问 222
7.1 现代数据处理模式 222
7.1.1 领域驱动设计 223
7.1.2 微服务时代的数据存储 223
7.1.3 多语言持久化 226
7.1.4 数据库即服务 227
7.1.5 跨微服务共享数据 228
7.2 获取数据的同步模型 233
7.2.1 数据库访问的连接协议 233
7.2.2 数据库驱动程序 235
7.2.3 JDBC 236
7.2.4 Spring JDBC 238
7.2.5 Spring Data JDBC 239
7.2.6 JPA 241
7.2.7 Spring Data JPA 242
7.2.8 Spring Data NoSQL 243
7.2.9 同步模型的局限性 245
7.2.10 同步模型的优点 247
7.3 使用 Spring Data 进行响应式数据访问 247
7.3.1 使用 MongoDB 响应式库 248
7.3.2 组合存储库操作 251
7.3.3 响应式存储库的工作原理 255
7.3.4 响应式事务 261
7.3.5 Spring Data 响应式连接器 268
7.3.6 限制和预期的改进 270
7.3.7 异步数据库访问 271
7.3.8 响应式关系型数据库连接 273
7.4 将同步存储库转换为响应式存储库 276
7.4.1 使用 rxjava2-jdbc 库 276
7.4.2 包装同步 CrudRepository 278
7.5 响应式 Spring Data 实战 281
7.6 小结 284
第 8 章 使用 Cloud Streams 提升伸缩性 286
8.1 消息代理服务器是消息驱动系统的关键 286
8.1.1 服务器端负载均衡 287
8.1.2 基于 Spring Cloud 和 Ribbon实现客户端负载均衡
288
8.1.3 消息代理服务器——消息传递的弹性可靠层 293
8.1.4 消息代理服务器市场 297
8.2 Spring Cloud Streams——通向Spring 生态系统的桥梁
297
8.3 云上的响应式编程 304
8.3.1 Spring Cloud Data Flow 305
8.3.2 基于 Spring Cloud Function的最细粒度应用程序
306
8.3.3 Spring Cloud——作为数据流 一部分的函数 311
8.4 基于 RSocket 的低延迟、响应式 消息传递 315
8.4.1 对比 RSocket 与 Reactor-Netty 315
8.4.2 Java 中的 RSocket 316
8.4.3 对比 RSocket 和 gRPC 321
8.4.4 Spring 框架中的 RSocket 322
8.4.5 其他框架中的 RSocket 324
8.4.6 RSocket 小结 324
8.5 小结 325
第 9 章 测试响应式应用程序 326
9.1 为什么响应式流难以测试 326
9.2 使用 StepVerifier 测试响应式流 327
9.2.1 StepVerifier 要点 327
9.2.2 使用 StepVerifier 进行 高级测试 330
9.2.3 处理虚拟时间 331
9.2.4 验证响应式上下文 333
9.3 测试 WebFlux 334
9.3.1 使用 WebTestClient 测试 控制器 334
9.3.2 测试 WebSocket 339
9.4 小结 342
第 10 章 最后,发布! 343
10.1 DevOps 友好型应用程序的重要性 343
10.2 监控响应式 Spring 应用程序 345
10.2.1 Spring Boot Actuator 346
10.2.2 Micrometer(千分尺) 354
10.2.3 监控响应式流 356
10.2.4 基于 Spring Boot Sleuth 的 分布式跟踪 359
10.2.5 基于 Spring Boot Admin 2.x的漂亮 UI 361
10.3 部署到云端 363
10.3.1 部署到 Amazon Web 服务 365
10.3.2 部署到 Google Kubernetes引擎 365
10.3.3 部署到 Pivotal Cloud Foundry 365
10.3.4 基于 Kubernetes 和 Istio 的FaaS 平台 Knative
369
10.3.5 对成功部署应用程序的建议 369
10.4 小结 370