第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
· · · · · · (
收起)