當下激烈的市場競爭導致企業(yè)對高響應性系統(tǒng)的需求不斷增加,這對開發(fā)人員的響應式編程技術(shù)提出了新的要求。《Spring響應式編程》深入淺出,從響應式系統(tǒng)的基本原理入手,詳盡地介紹了響應式系統(tǒng)的優(yōu)勢和應用方向。同時,本書借助Spring框架及WebFlux等工具,對響應式編程進行了極具實踐性的指導。此外,本書還引入了Project Reactor這一響應式編程利器。在完成對本書的學習后,你將有能力利用這些工具,構(gòu)建響應式系統(tǒng)。
本書適合有志于學習響應式編程的程序員和需要構(gòu)建響應式系統(tǒng)的開發(fā)人員閱讀。
·Project Reactor和Spring框架重要貢獻者力作
·深入剖析響應式編程及其框架底層原理
·代碼詳實、圖文并茂,展現(xiàn)系統(tǒng)構(gòu)建的高級解決方案
在學習本書后,你將能夠運用自己的技能,加入Spring 5帶來的響應式變革!閱讀本書,你將:
- 發(fā)現(xiàn)響應式系統(tǒng)和響應式編程之間的區(qū)別
- 探索響應式系統(tǒng)的優(yōu)勢并了解其應用
- 掌握Spring 5中的響應式編程
- 了解Project Reactor
- 使用Spring 5和Project Reactor構(gòu)建響應式系統(tǒng)
奧萊·多庫卡(Oleh Dokuka)
資深軟件工程師,Pivotal公司Java Champion,作為Project Reactor和Spring框架的重要貢獻者,熟悉其內(nèi)部機制,并提倡使用Project Reactor進行日常響應式編程。他經(jīng)常在軟件開發(fā)中實際應用Spring框架和Project Reactor,非常了解使用這些技術(shù)構(gòu)建響應式系統(tǒng)的方法。
伊戈爾?洛茲恩斯基(Igor Lozynskyi)
資深Java開發(fā)人員,擁有約10年的Java平臺經(jīng)驗,主要致力于開發(fā)可靠、可伸縮且速度極快的系統(tǒng),熱衷于打理生活和軟件開發(fā)中總在變化的項目。
第 1 章 為什么選擇響應式 Spring 1
1.1 為什么需要響應性 1
1.2 響應性應用案例 6
1.3 為什么采用響應式 Spring 9
1.4 小結(jié) 16
第 2 章 Spring 響應式編程—— 基本概念 17
2.1 Spring 的早期響應式解決方案 17
2.1.1 觀察者模式 18
2.1.2 觀察者模式使用示例 20
2.1.3 基于@EventListener 注解的發(fā)布訂閱模式 23
2.1.4 使用@EventListener 注解構(gòu)建應用程序 24
2.2 使用 RxJava 作為響應式框架 31
2.2.1 觀察者加迭代器等于響應式流 31
2.2.2 生產(chǎn)和消費流數(shù)據(jù) 33
2.2.3 生成異步序列 35
2.2.4 流轉(zhuǎn)換和彈珠圖 36
2.2.5 RxJava 的先決條件和優(yōu)勢 39
2.2.6 使用 RxJava 重建我們的應用程序 41
2.3 響應式庫簡史 45
2.4 響應式現(xiàn)狀 46
2.5 小結(jié) 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 響應式流規(guī)范基礎知識 60
3.2.1 響應式流規(guī)范實戰(zhàn) 66
3.2.2 響應式流技術(shù)兼容套件 71
3.2.3 JDK 9 77
3.3 高級主題——響應式流中的異步和并行 79
3.4 響應式環(huán)境的轉(zhuǎn)變 81
3.4.1 RxJava 的轉(zhuǎn)變 81
3.4.2 Vert.x 的調(diào)整 83
3.4.3 Ratpack 的改進 84
3.4.4 MongoDB 響應式流驅(qū)動程序 85
3.4.5 響應式技術(shù)組合實戰(zhàn) 86
3.5 小結(jié) 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 創(chuàng)建 Flux 序列和 Mono 序列 100
4.2.4 訂閱響應式流 102
4.2.5 用操作符轉(zhuǎn)換響應式序列 105
4.2.6 以編程方式創(chuàng)建流 119
4.2.7 錯誤處理 125
4.2.8 背壓處理 127
4.2.9 熱數(shù)據(jù)流和冷數(shù)據(jù)流 127
4.2.10 處理時間 131
4.2.11 組合和轉(zhuǎn)換響應式流 131
4.2.12 處理器 133
4.2.13 測試和調(diào)試 Project Reactor 134
4.2.14 Reactor 插件 134
4.3 Project Reactor 的高級主題 135
4.3.1 響應式流的生命周期 135
4.3.2 Reactor 中的線程調(diào)度模型 140
4.3.3 Project Reactor 內(nèi)幕 149
4.4 小結(jié) 153
第 5 章 使用 Spring Boot 2 實現(xiàn)響應性 154
5.1 快速啟動是成功的關(guān)鍵 154
5.1.1 使用 Spring Roo 嘗試更快 地開發(fā)應用程序 156
5.1.2 Spring Boot 是快速增長的 應用程序的關(guān)鍵 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 響應式監(jiān)控 164
5.3 小結(jié) 165
第 6 章 WebFlux 異步非阻塞通信 166
6.1 WebFlux 作為核心響應式服務器基礎 166
6.1.1 響應式 Web 內(nèi)核 169
6.1.2 響應式 Web 和 MVC 框架 171
6.1.3 基于 WebFlux 的純函數(shù)式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 基于微服務的系統(tǒng) 216
6.3.2 處理客戶端連接速度慢的系統(tǒng) 217
6.3.3 流或?qū)崟r系統(tǒng) 217
6.3.4 WebFlux 實戰(zhàn) 217
6.4 小結(jié) 221
第 7 章 響應式數(shù)據(jù)庫訪問 222
7.1 現(xiàn)代數(shù)據(jù)處理模式 222
7.1.1 領域驅(qū)動設計 223
7.1.2 微服務時代的數(shù)據(jù)存儲 223
7.1.3 多語言持久化 226
7.1.4 數(shù)據(jù)庫即服務 227
7.1.5 跨微服務共享數(shù)據(jù) 228
7.2 獲取數(shù)據(jù)的同步模型 233
7.2.1 數(shù)據(jù)庫訪問的連接協(xié)議 233
7.2.2 數(shù)據(jù)庫驅(qū)動程序 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 同步模型的優(yōu)點 247
7.3 使用 Spring Data 進行響應式數(shù)據(jù)訪問 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 異步數(shù)據(jù)庫訪問 271
7.3.8 響應式關(guān)系型數(shù)據(jù)庫連接 273
7.4 將同步存儲庫轉(zhuǎn)換為響應式存儲庫 276
7.4.1 使用 rxjava2-jdbc 庫 276
7.4.2 包裝同步 CrudRepository 278
7.5 響應式 Spring Data 實戰(zhàn) 281
7.6 小結(jié) 284
第 8 章 使用 Cloud Streams 提升伸縮性 286
8.1 消息代理服務器是消息驅(qū)動系統(tǒng)的關(guān)鍵 286
8.1.1 服務器端負載均衡 287
8.1.2 基于 Spring Cloud 和 Ribbon實現(xiàn)客戶端負載均衡
288
8.1.3 消息代理服務器——消息傳遞的彈性可靠層 293
8.1.4 消息代理服務器市場 297
8.2 Spring Cloud Streams——通向Spring 生態(tài)系統(tǒng)的橋梁
297
8.3 云上的響應式編程 304
8.3.1 Spring Cloud Data Flow 305
8.3.2 基于 Spring Cloud Function的最細粒度應用程序
306
8.3.3 Spring Cloud——作為數(shù)據(jù)流 一部分的函數(shù) 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 小結(jié) 324
8.5 小結(jié) 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 小結(jié) 342
第 10 章 最后,發(fā)布! 343
10.1 DevOps 友好型應用程序的重要性 343
10.2 監(jiān)控響應式 Spring 應用程序 345
10.2.1 Spring Boot Actuator 346
10.2.2 Micrometer(千分尺) 354
10.2.3 監(jiān)控響應式流 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 小結(jié) 370