當(dāng)下激烈的市場競爭導(dǎo)致企業(yè)對高響應(yīng)性系統(tǒng)的需求不斷增加,這對開發(fā)人員的響應(yīng)式編程技術(shù)提出了新的要求。《Spring響應(yīng)式編程》深入淺出,從響應(yīng)式系統(tǒng)的基本原理入手,詳盡地介紹了響應(yīng)式系統(tǒng)的優(yōu)勢和應(yīng)用方向。同時(shí),本書借助Spring框架及WebFlux等工具,對響應(yīng)式編程進(jìn)行了極具實(shí)踐性的指導(dǎo)。此外,本書還引入了Project Reactor這一響應(yīng)式編程利器。在完成對本書的學(xué)習(xí)后,你將有能力利用這些工具,構(gòu)建響應(yīng)式系統(tǒng)。
本書適合有志于學(xué)習(xí)響應(yīng)式編程的程序員和需要構(gòu)建響應(yīng)式系統(tǒng)的開發(fā)人員閱讀。
·Project Reactor和Spring框架重要貢獻(xiàn)者力作
·深入剖析響應(yīng)式編程及其框架底層原理
·代碼詳實(shí)、圖文并茂,展現(xiàn)系統(tǒng)構(gòu)建的高級解決方案
在學(xué)習(xí)本書后,你將能夠運(yùn)用自己的技能,加入Spring 5帶來的響應(yīng)式變革!閱讀本書,你將:
- 發(fā)現(xiàn)響應(yīng)式系統(tǒng)和響應(yīng)式編程之間的區(qū)別
- 探索響應(yīng)式系統(tǒng)的優(yōu)勢并了解其應(yīng)用
- 掌握Spring 5中的響應(yīng)式編程
- 了解Project Reactor
- 使用Spring 5和Project Reactor構(gòu)建響應(yīng)式系統(tǒng)
奧萊·多庫卡(Oleh Dokuka)
資深軟件工程師,Pivotal公司Java Champion,作為Project Reactor和Spring框架的重要貢獻(xiàn)者,熟悉其內(nèi)部機(jī)制,并提倡使用Project Reactor進(jìn)行日常響應(yīng)式編程。他經(jīng)常在軟件開發(fā)中實(shí)際應(yīng)用Spring框架和Project Reactor,非常了解使用這些技術(shù)構(gòu)建響應(yīng)式系統(tǒng)的方法。
伊戈?duì)?洛茲恩斯基(Igor Lozynskyi)
資深Java開發(fā)人員,擁有約10年的Java平臺經(jīng)驗(yàn),主要致力于開發(fā)可靠、可伸縮且速度極快的系統(tǒng),熱衷于打理生活和軟件開發(fā)中總在變化的項(xiàng)目。
第 1 章 為什么選擇響應(yīng)式 Spring 1
1.1 為什么需要響應(yīng)性 1
1.2 響應(yīng)性應(yīng)用案例 6
1.3 為什么采用響應(yīng)式 Spring 9
1.4 小結(jié) 16
第 2 章 Spring 響應(yīng)式編程—— 基本概念 17
2.1 Spring 的早期響應(yīng)式解決方案 17
2.1.1 觀察者模式 18
2.1.2 觀察者模式使用示例 20
2.1.3 基于@EventListener 注解的發(fā)布訂閱模式 23
2.1.4 使用@EventListener 注解構(gòu)建應(yīng)用程序 24
2.2 使用 RxJava 作為響應(yīng)式框架 31
2.2.1 觀察者加迭代器等于響應(yīng)式流 31
2.2.2 生產(chǎn)和消費(fèi)流數(shù)據(jù) 33
2.2.3 生成異步序列 35
2.2.4 流轉(zhuǎn)換和彈珠圖 36
2.2.5 RxJava 的先決條件和優(yōu)勢 39
2.2.6 使用 RxJava 重建我們的應(yīng)用程序 41
2.3 響應(yīng)式庫簡史 45
2.4 響應(yīng)式現(xiàn)狀 46
2.5 小結(jié) 48
第 3 章 響應(yīng)式流——新的流標(biāo)準(zhǔn) 49
3.1 無處不在的響應(yīng)性 49
3.1.1 API 不一致性問題 49
3.1.2 “拉”與“推” 52
3.1.3 流量控制問題 56
3.1.4 解決方案 60
3.2 響應(yīng)式流規(guī)范基礎(chǔ)知識 60
3.2.1 響應(yīng)式流規(guī)范實(shí)戰(zhàn) 66
3.2.2 響應(yīng)式流技術(shù)兼容套件 71
3.2.3 JDK 9 77
3.3 高級主題——響應(yīng)式流中的異步和并行 79
3.4 響應(yīng)式環(huán)境的轉(zhuǎn)變 81
3.4.1 RxJava 的轉(zhuǎn)變 81
3.4.2 Vert.x 的調(diào)整 83
3.4.3 Ratpack 的改進(jìn) 84
3.4.4 MongoDB 響應(yīng)式流驅(qū)動程序 85
3.4.5 響應(yīng)式技術(shù)組合實(shí)戰(zhàn) 86
3.5 小結(jié) 89
第 4 章 Project Reactor——響應(yīng)式 應(yīng)用程序的基礎(chǔ) 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 在項(xiàng)目中添加 Reactor 96
4.2.2 響應(yīng)式類型——Flux 和 Mono 96
4.2.3 創(chuàng)建 Flux 序列和 Mono 序列 100
4.2.4 訂閱響應(yīng)式流 102
4.2.5 用操作符轉(zhuǎn)換響應(yīng)式序列 105
4.2.6 以編程方式創(chuàng)建流 119
4.2.7 錯(cuò)誤處理 125
4.2.8 背壓處理 127
4.2.9 熱數(shù)據(jù)流和冷數(shù)據(jù)流 127
4.2.10 處理時(shí)間 131
4.2.11 組合和轉(zhuǎn)換響應(yīng)式流 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 響應(yīng)式流的生命周期 135
4.3.2 Reactor 中的線程調(diào)度模型 140
4.3.3 Project Reactor 內(nèi)幕 149
4.4 小結(jié) 153
第 5 章 使用 Spring Boot 2 實(shí)現(xiàn)響應(yīng)性 154
5.1 快速啟動是成功的關(guān)鍵 154
5.1.1 使用 Spring Roo 嘗試更快 地開發(fā)應(yīng)用程序 156
5.1.2 Spring Boot 是快速增長的 應(yīng)用程序的關(guān)鍵 156
5.2 Spring Boot 2.0 中的響應(yīng)式 157
5.2.1 Spring Core 中的響應(yīng)式 157
5.2.2 響應(yīng)式 Web 160
5.2.3 響應(yīng)式 Spring Data 162
5.2.4 響應(yīng)式 Spring Session 163
5.2.5 響應(yīng)式 Spring Security 163
5.2.6 響應(yīng)式 Spring Cloud 163
5.2.7 響應(yīng)式 Spring Test 164
5.2.8 響應(yīng)式監(jiān)控 164
5.3 小結(jié) 165
第 6 章 WebFlux 異步非阻塞通信 166
6.1 WebFlux 作為核心響應(yīng)式服務(wù)器基礎(chǔ) 166
6.1.1 響應(yīng)式 Web 內(nèi)核 169
6.1.2 響應(yīng)式 Web 和 MVC 框架 171
6.1.3 基于 WebFlux 的純函數(shù)式Web 174
6.1.4 基于 WebClient 的非阻塞 跨服務(wù)通信 178
6.1.5 響應(yīng)式 WebSocket API 181
6.1.6 作為 WebSocket 輕量級 替代品的響應(yīng)式 SSE 184
6.1.7 響應(yīng)式模板引擎 186
6.1.8 響應(yīng)式 Web 安全 188
6.1.9 與其他響應(yīng)式庫的交互 191
6.2 對比 WebFlux 和 Web MVC 192
6.2.1 比較框架時(shí)的定律 192
6.2.2 全面分析和比較 199
6.3 WebFlux 的應(yīng)用 216
6.3.1 基于微服務(wù)的系統(tǒng) 216
6.3.2 處理客戶端連接速度慢的系統(tǒng) 217
6.3.3 流或?qū)崟r(shí)系統(tǒng) 217
6.3.4 WebFlux 實(shí)戰(zhàn) 217
6.4 小結(jié) 221
第 7 章 響應(yīng)式數(shù)據(jù)庫訪問 222
7.1 現(xiàn)代數(shù)據(jù)處理模式 222
7.1.1 領(lǐng)域驅(qū)動設(shè)計(jì) 223
7.1.2 微服務(wù)時(shí)代的數(shù)據(jù)存儲 223
7.1.3 多語言持久化 226
7.1.4 數(shù)據(jù)庫即服務(wù) 227
7.1.5 跨微服務(wù)共享數(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)點(diǎn) 247
7.3 使用 Spring Data 進(jìn)行響應(yīng)式數(shù)據(jù)訪問 247
7.3.1 使用 MongoDB 響應(yīng)式庫 248
7.3.2 組合存儲庫操作 251
7.3.3 響應(yīng)式存儲庫的工作原理 255
7.3.4 響應(yīng)式事務(wù) 261
7.3.5 Spring Data 響應(yīng)式連接器 268
7.3.6 限制和預(yù)期的改進(jìn) 270
7.3.7 異步數(shù)據(jù)庫訪問 271
7.3.8 響應(yīng)式關(guān)系型數(shù)據(jù)庫連接 273
7.4 將同步存儲庫轉(zhuǎn)換為響應(yīng)式存儲庫 276
7.4.1 使用 rxjava2-jdbc 庫 276
7.4.2 包裝同步 CrudRepository 278
7.5 響應(yīng)式 Spring Data 實(shí)戰(zhàn) 281
7.6 小結(jié) 284
第 8 章 使用 Cloud Streams 提升伸縮性 286
8.1 消息代理服務(wù)器是消息驅(qū)動系統(tǒng)的關(guān)鍵 286
8.1.1 服務(wù)器端負(fù)載均衡 287
8.1.2 基于 Spring Cloud 和 Ribbon實(shí)現(xiàn)客戶端負(fù)載均衡
288
8.1.3 消息代理服務(wù)器——消息傳遞的彈性可靠層 293
8.1.4 消息代理服務(wù)器市場 297
8.2 Spring Cloud Streams——通向Spring 生態(tài)系統(tǒng)的橋梁
297
8.3 云上的響應(yīng)式編程 304
8.3.1 Spring Cloud Data Flow 305
8.3.2 基于 Spring Cloud Function的最細(xì)粒度應(yīng)用程序
306
8.3.3 Spring Cloud——作為數(shù)據(jù)流 一部分的函數(shù) 311
8.4 基于 RSocket 的低延遲、響應(yīng)式 消息傳遞 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 章 測試響應(yīng)式應(yīng)用程序 326
9.1 為什么響應(yīng)式流難以測試 326
9.2 使用 StepVerifier 測試響應(yīng)式流 327
9.2.1 StepVerifier 要點(diǎn) 327
9.2.2 使用 StepVerifier 進(jìn)行 高級測試 330
9.2.3 處理虛擬時(shí)間 331
9.2.4 驗(yàn)證響應(yīng)式上下文 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 友好型應(yīng)用程序的重要性 343
10.2 監(jiān)控響應(yīng)式 Spring 應(yīng)用程序 345
10.2.1 Spring Boot Actuator 346
10.2.2 Micrometer(千分尺) 354
10.2.3 監(jiān)控響應(yīng)式流 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 服務(wù) 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 對成功部署應(yīng)用程序的建議 369
10.4 小結(jié) 370