RxJava反應式程式設計 | 美妙體態瑜珈在你家 - 2024年11月

RxJava反應式程式設計

作者:(波蘭)托馬什·努爾凱維茨(美)本•克里斯滕森
出版社:人民郵電
出版日期:2019年12月01日
ISBN:9787115524003
語言:繁體中文
售價:517元

RxJava廣泛應用於Android應用程式的開發,得到了廣大開發人員的青睞。其語法簡潔,運行高效,未來有望成為主流的開發模式。
 
本書主要包括:RxJava的基本概念,RxJava提供的諸多操作符,如何將RxJava用於自己的應用程式以及如何與它交互,如何將RxJava嵌入代碼庫的不同地方,如何從頭到尾實現反應式應用程式,流控制,回壓機制,基於Rx的應用程式的單元測試、維護以及問題排查等相關技術。
 
本書還特別收錄了2.0版本和 1.0版本的異同比較。

托馬什·努爾凱維茨(Tomasz Nurkiewicz),軟體工程師,熱愛JVM語言和開源技術,經常為DZone網站撰寫博客,並在世界各地的Java會議上發表演講。
 
本·克里斯滕森(Ben Christensen),軟體工程師,曾在蘋果、Netflix和Facebook公司工作,專注於彈性、擴展性和分散式系統,為Hystrix和RxJava等開源項目做出了貢獻。
 
張衛濱,畢業于天津大學,軟體發展工程師,擁有十餘年相關經驗。熱愛馬拉松和搖滾樂,喜歡探究和鑽研新技術,譯作包括《Spring實戰》《Spring Data實戰》《反應式Web應用開發》等。

本書讚譽 xii

譯者序 xiii

序 xv

前言 xvii

第 1 章 使用RxJava實現反應式程式設計 1
1.1 反應式程式設計與RxJava 1
1.2 何時需要反應式程式設計 2
1.3 RxJava是如何運行的 3
1.3.1 推送與拉取 3
1.3.2 非同步與同步 4
1.3.3 併發與並行 7
1.3.4 延遲執行與立即執行 9
1.3.5 雙重性 10
1.3.6 基數 11
1.4 阻塞I O與非阻塞I O 15
1.5 反應式抽象 20

第 2 章 Reactive Extensions 21
2.1 剖析rx.Observable 21
2.2 訂閱來自Observable的通知 24
2.3 使用Subscription和Subscriber控制監聽器 25
2.4 創建Observable 26
2.4.1 掌握Observable.create() 27
2.4.2 無窮流 30
2.4.3 計時:timer() 和interval() 34
2.4.4 hot和cold類型的Observable 34
2.5 用例:從回檔API到Observable流 35
2.6 rx.subjects.Subject 40
2.7 ConnectableObservable 42
2.7.1 使用publish().refCount()實現單次訂閱 43
2.7.2 ConnectableObservable 的生命週期 44
2.8 小結 47

第 3 章 操作符與轉換 48
3.1 核心的操作符:映射和過濾 48
3.1.1 使用map()進行一對一轉換 50
3.1.2 使用flatMap()進行包裝 53
3.1.3 使用delay()操作符延遲事件 57
3.1.4 flatMap()之後的事件順序 58
3.1.5 使用concatMap()保證順序 60
3.2 多個Observable 61
3.2.1 使用merge()將多個Observable合併為一個 62
3.2.2 使用zip()和zipWith()進行成對地組合 63
3.2.3 流之間不同步的情況:combineLatest()、withLatestFrom()和amb() 66
3.3 高級操作符:collect()、reduce()、scan()、distinct()和groupBy() 71
3.3.1 使用Scan和Reduce掃描整個序列 71
3.3.2 使用可變的累加器進行縮減:collect() 73
3.3.3 使用single()斷言的Observable只有一個條目 74
3.3.4 使用distinct()和distinctUntilChanged()丟棄重複條目 74
3.4 使用skip()、takeWhile()等進行切片和切塊 76
3.4.1 組合流的方式:concat()、merge()和switchOnNext() 78
3.4.2 使用groupBy()實現基於標準的切塊流 84
3.4.3 下一步要學習什麼 86
3.5 編寫自訂的操作符 87
3.5.1 借助compose()重用操作符 87
3.5.2 使用lift()實現高級操作符 89
3.6 小結 93

第 4 章 將反應式程式設計應用于已有應用程式 94
4.1 從集合到Observable 94
4.2 BlockingObservable:脫離反應式的世界 95
4.3 擁抱延遲執行 97
4.4 組合Observable 98
4.5 命令式併發 101
4.6 flatMap()作為非同步連結操作符 105
4.7 使用Stream代替回檔 109
4.8 定期輪詢以獲取變更 111
4.9 RxJava的多執行緒 113
4.9.1 調度器是什麼 113
4.9.2 使用subscribeOn()進行聲明式訂閱 121
4.9.3 subscribeOn()的併發性和行為 124
4.9.4 使用groupBy()進行批量請求 128
4.9.5 使用observeOn()聲明併發 129
4.9.6 調度器的其他用途 132
4.10 小結 133

第 5 章 實現完整的反應式應用程式 134
5.1 解決C10k問題 134
5.1.1 傳統的基於執行緒的HTTP伺服器 135
5.1.2 借助Netty和RxNetty實現非阻塞的HTTP伺服器 137
5.1.3 阻塞式和反應式伺服器的基準測試 144
5.1.4 反應式HTTP伺服器之旅 149
5.2 HTTP用戶端代碼 149
5.3 關聯式資料庫訪問 152
5.4 CompletableFuture與Stream 156
5.4.1 CompletableFuture概述 157
5.4.2 與CompletableFuture進行交互 161
5.5 Observable與Single 164
5.5.1 創建和消費Single 165
5.5.2 使用zip、merge和concat組合回應 167
5.5.3 與Observable和CompletableFuture的交互 169
5.5.4 何時使用Single 170
5.6 小結 170

第 6 章 流控制和回壓 171
6.1 流控制 171
6.1.1 定期採樣和節流 171
6.1.2 將事件緩衝至列表中 174
6.1.3 視窗移動 179
6.1.4 借助debounce()跳過陳舊的事件 180
6.2 回壓 183
6.2.1 RxJava中的回壓 184
6.2.2 內置的回壓 187
6.2.3 Producer與缺失回壓場景 189
6.2.4 按照請求返回指定數量的資料 192
6.3 小結 196

第 7 章 測試和排錯 197
7.1 錯誤處理 197
7.1.1 我的異常在哪裡 198
7.1.2 替代聲明式的try-catch 200
7.1.3 事件沒有發生導致的超時 203
7.1.4 失敗之後的重試 206
7.2 測試和調試 209
7.2.1 虛擬時間 209
7.2.2 單元測試中的調度器 211
7.3 單元測試 213
7.4 監控和調試 219
7.4.1 doOn...()回檔 220
7.4.2 測量和監控 221
7.5 小結 223

第 8 章 案例學習 224
8.1 使用RxJava進行Android開發 224
8.1.1 避免Activity中的記憶體洩漏 224
8.1.2 Retrofit對RxJava的原生支持 227
8.1.3 Android中的調度器 231
8.1.4 將UI事件作為流 233
8.2 使用Hystrix管理失敗 236
8.2.1 使用Hystrix的第 一步 236
8.2.2 使用HystrixObservableCommand的非阻塞命令 238
8.2.3 艙壁模式和快速失敗 239
8.2.4 批次處理和合併命令 241
8.2.5 監控和儀錶盤 245
8.3 查詢NoSQL資料庫 248
8.3.1 Couchbase用戶端API 248
8.3.2 MongoDB用戶端API 249
8.4 Camel集成 251
8.4.1 通過Camel來消費檔 251
8.4.2 接收來自Kafka的消息 252
8.5 Java 8的Stream和CompletableFuture 252
8.5.1 並行流的用途 253
8.5.2 選擇恰當的併發抽象 255
8.5.3 何時使用Observable 255
8.6 記憶體耗費和洩漏 256
8.7 小結 260

第 9 章 未來的方向 261
9.1 反應式流 261
9.2 Observable和Flowable 261
9.3 性能 262
9.4 遷移 262

附錄A HTTP伺服器的更多樣例 263
附錄B Observable操作符的決策樹 269
附錄C RxJava 1.0至RxJava 2.0的遷移指南 272
關於作者 306
關於封面 306


相關書籍