Vert.x 實戰 Vert.X in Action: Asynchronous and Reactive Java

[法] 於連·蓬熱(Julien Ponge) 著 黃灰紅 譯

  • Vert.x 實戰-preview-1
  • Vert.x 實戰-preview-2
  • Vert.x 實戰-preview-3
Vert.x 實戰-preview-1

買這商品的人也買了...

商品描述

主要內容 ● 如何構建反應式的服務 ● 如何對外部服務的故障做出響應 ● 如何進行水平擴展 ● Vert.x工具包的架構及其測試方式 ● 如何基於Docker和Kubernetes部署服務

目錄大綱

第Ⅰ部分  基於Vert.x的異步編程基本原理

第1章  Vert.x、異步編程和反應式系統 3

1.1  分佈式和網絡化是常態 3

1.2  我們不是在孤島上生活 4

1.3  網絡上沒有免費的午餐 5

1.4  簡潔的阻塞式API 5

1.5  阻塞式API浪費了資源,增加了成本 7

1.6  基於非阻塞I/O的異步

編程 9

1.7  事件驅動的多路復用:事件循環 12

1.8  什麽是反應式系統 15

1.9  反應式還有哪些含義 16

1.10  什麽是Vert.x 17

1.11  你的第一個Vert.x應用  程序 18

1.11.1  準備項目 18

1.11.2  VertxEcho類 19

1.11.3  回調函數的角色 21

1.11.4  它是反應式的嗎 22

1.12  Vert.x的替代品 23

1.13  本章小結 25

第2章  Verticle:Vert.x的基本處理單元 27

2.1  編寫一個Verticle 27

2.1.1  準備項目 28

2.1.2  實現Verticle類 29

2.1.3  運行並初次觀察 30

2.2  關於Verticle的更多細節 32

2.2.1  阻塞與事件循環 32

2.2.2  生命周期事件的異步通知 33

2.2.3  部署Verticle 35

2.2.4  傳遞配置參數 38

2.3  當代碼需要阻塞時 39

2.3.1  Worker Verticle 39

2.3.2  executeBlocking方法 40

2.4  Verticle中到底有什麽 42

2.4.1  Verticle及其環境 42

2.4.2  關於Verticle Context的更多細節 43

2.4.3  橋接Vert.x線程和非Vert.x線程 45

2.5  本章小結 46

第3章  事件總線:Vert.x應用程序的骨乾 47

3.1  什麽是事件總線 47

3.1.1  事件總線是不是另一種消息代理 48

3.1.2  “點對點”模式 49

3.1.3  “請求-應答”模式 49

3.1.4  “發布-訂閱”模式 50

3.2  事件總線的示例 51

3.2.1  溫度傳感器Verticle 52

3.2.2  監聽器Verticle 53

3.2.3  傳感器數據Verticle 54

3.2.4  HTTP服務器Verticle 54

3.2.5  啟動應用程序 58

3.3  集群化和分佈式的事件總線 59

3.3.1  Vert.x中的集群 59

3.3.2  從事件總線到分佈式事件總線 60

3.4  本章小結 63

第4章  異步數據和事件流 65

4.1  統一的流模型 65

4.2  什麽是背壓 68

4.3  開發一個音樂流點唱機 70

4.3.1  功能與用法 71

4.3.2  HTTP處理:宏觀視圖 73

4.3.3  點唱機Verticle的基礎 73

4.3.4  傳入的HTTP連接 75

4.3.5  盡可能高效地下載 76

4.3.6  讀取MP3文件,但不能太快 77

4.4  解析簡單的流 81

4.5  解析復雜的流 83

4.6  關於流獲取模式的簡短說明 86

4.7  本章小結 88

第5章  回調以外的異步編程模型 89

5.1  構建異步操作:一個邊緣服務的示例 89

5.1.1  應用場景 90

5.1.2  溫度傳感器Verticle 91

5.1.3  快照服務Verticle 92

5.2  回調 93

5.2.1  實現 93

5.2.2  運行 95

5.2.3  “回調地獄”不是根本問題 96

5.3  Future和Promise 98

5.3.1  Vert.x中的Future和Promise 98

5.3.2  Vert.x 4中基於Future的API 100

5.3.3  與CompletionStage API的互操作 100

5.3.4  使用Vert.x Future特性實現的Collector 

Service 102

5.4  反應式擴展 103

5.4.1  RxJava的簡要說明 104

5.4.2  RxJava與Vert.x 107

5.4.3  用RxJava實現的CollectorService 108

5.5  Kotlin協程 111

5.5.1  什麽是協程 111

5.5.2  Vert.x與Kotlin的協程 112

5.5.3  使用協程實現邊緣服務 113

5.6  究竟應該用哪一種模型 115

5.7  本章小結 116

第6章  不只是事件總線 117

6.1  用服務API重新實現溫度傳感器 117

6.2  RPC的回歸 118

6.3  定義服務接口 119

6.4  服務的實現 121

6.5  啟用Proxy代碼自動生成 122

6.6  部署事件總線服務 122

6.7  回調之外的服務代理 123

6.8  Vert.x中的測試 125

6.8.1  在Vert.x中使用JUnit 5 125

6.8.2  測試DataVerticle 126

6.8.3  運行測試 129

6.9  本章小結 129

第Ⅱ部分  用Vert.x開發反應式服務

第7章  設計一個反應式應用程序 133

7.1  反應式應用程序的必要條件 133

7.2  “一萬步挑戰” 134

7.3  一個應用程序,多個服務 137

7.4  服務規範 139

7.4.1  用戶資料服務 139

7.4.2  數據收集服務 140

7.4.3  用戶活動服務 141

7.4.4  對外接口服務 143

7.4.5  用戶Web應用程序 144

7.4.6  事件統計服務 145

7.4.7  賀信服務 146

7.4.8  公告牌Web應用程序 146

7.5  運行應用程序 147

7.6  本章小結 149

第8章  Web技術棧 151

8.1  實現對外接口服務 152

8.1.1  路由HTTP請求 152

8.1.2  發起HTTP請求 154

8.2  用JWT令牌進行訪問控制 156

8.2.1  使用JWT令牌 156

8.2.2  JWT令牌中有

什麽 158

8.2.3  用Vert.x處理JWT令牌 159

8.2.4  用Vert.x簽發JWT令牌 161

8.3  跨域資源共享(CORS) 162

8.3.1  問題在哪裡 162

8.3.2  在Vert.x中支持CORS 164

8.4  一個現代化的Web前端 165

8.4.1  Vue.js 165

8.4.2  Vue.js應用程序結構及構建集成 166

8.4.3  後端集成的效果演示 168

8.4.4  在Vert.x中服務靜態內容 170

8.5  編寫集成測試 171

8.6  本章小結 175

第9章  Vert.x中的消息機制與事件流 177

9.1  用Vert.x實現基於事件驅動的服務 177

9.1.1  Vert.x為我們提供了什麽 178

9.1.2  我們會用到的中間件和服務 179

9.1.3  AMQP和Message Broker簡介 179

9.1.4  Kafka簡介 180

9.2  通過HTTP和AMQP

可靠地接收消息 181

9.2.1  從AMQP接收數據 181

9.2.2  將AMQP消息轉換成Kafka記錄 183

9.2.3  從HTTP接收數據 185

9.3  發送賀信 186

9.3.1  監聽每日步數變化 187

9.3.2  發送郵件 188

9.4  集成測試 190

9.4.1  測試收取功能 190

9.4.2  測試賀信功能 193

9.5  本章小結 196

第10章  用數據庫進行持久化狀態管理 197

10.1  數據庫與Vert.x 197

10.1.1  Eclipse Vert.x支持的數據庫客戶端 198

10.1.2  數據對象映射並非必需 199

10.2  使用MongoDB的用戶資料服務 200

10.2.1  數據模型 200

10.2.2  用戶資料API Verticle及其初始化 201

10.2.3  校驗用戶輸入 202

10.2.4  在MongoDB中添加用戶 203

10.2.5  用戶的認證 206

10.2.6  獲取用戶數據 207

10.2.7  更新用戶數據 208

10.3  使用PostgreSQL的用戶活動服務 209

10.3.1  服務的數據模型 209

10.3.2  打開一個連接池 210

10.3.3  設備更新事件的生命周期 210

10.3.4  插入新記錄 211

10.3.5  生成設備的每日運動更新 213

10.3.6  用戶活動服務的查詢接口 214

10.4  集成測試 215

10.4.1  測試用戶資料服務 215

10.4.2  測試用戶活動服務接口 218

10.4.3  測試用戶活動服務的事件處理 219

10.5  本章小結 222

第11章  端到端的實時反應式事件處理 223

11.1  使用Kafka和RxJava實現高級的流式數據處理 223

11.1.1  生成用戶當天步數更新 224

11.1.2  計算數據收集服務的吞吐量 226

11.1.3  計算各城市的數據趨勢 227

11.2  實時的反應式Web應用  程序 229

11.2.1  將Kafka消息轉發至Vert.x事件總線 230

11.2.2  橋接事件總線和Web應用程序 231

11.2.3  Web應用程序基於Kafka消息的實時更新 233

11.3  流與狀態 235

11.3.1  數據更新流 235

11.3.2  排名數據的水合階段 235

11.3.3  根據消息流周期性地更新排名 237

11.4  本章小結 240

第12章  通過負載測試和混沌測試提升系統響應能力 241

12.1  初始實驗:系統的性能  好嗎 242

12.1.1  負載測試前的一些考量 242

12.1.2  用Locust模擬用戶 243

12.1.3  用Hey進行負載測試 246

12.2  混沌測試 250

12.2.1  測試方案 250

12.2.2  用Pumba進行混沌測試 251

12.2.3  系統尚不具備回彈性 253

12.3  從“可擴展性”到“可擴展

  性+回彈性” 254

12.3.1  強制超時 254

12.3.2  使用斷路器 256

12.3.3  回彈性與後備策略 260

12.4  本章小結 264

第13章  容器原生的Vert.x 265

13.1  雲環境里的溫度傳感器 266

13.1.1  溫度傳感器服務 267

13.1.2  傳感器網關 268

13.1.3  Heat API 269

13.1.4  部署本地集群 271

13.2  讓服務運行在  Kubernetes中 275

13.2.1  構建容器鏡像 276

13.2.2  集群與Kubernetes 278

13.2.3  Kubernetes的部署描述文件 280

13.3  Kubernetes中的一等公民 284

13.3.1  健康檢查 284

13.3.2  數據指標 288

13.4  是結束也是開始 291

13.5  本章小結 291