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