Vert.x實戰( 簡體 字) | |
作者:[法] 于連·蓬熱(Julien Ponge) 著 黃灰紅 譯 | 類別:1. -> 程式設計 -> 綜合 |
出版社:清華大學出版社 | 3dWoo書號: 55889 詢問書籍請說出此書號! 有庫存 NT售價: 490 元 |
出版日:6/1/2022 | |
頁數:285 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787302605676 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第Ⅰ部分基于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.2VertxEcho類 19 1.11.3回調函數的角色 21 1.11.4它是反應式的嗎 22 1.12Vert.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.1WorkerVerticle 39 2.3.2executeBlocking方法 40 2.4Verticle中到底有什么 42 2.4.1Verticle及其環境 42 2.4.2關于VerticleContext的更多細節 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.4HTTP服務器Verticle 54 3.2.5啟動應用程序 58 3.3集群化和分布式的事件總線 59 3.3.1Vert.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.2HTTP處理:宏觀視圖 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.3Future和Promise 98 5.3.1Vert.x中的Future和Promise 98 5.3.2Vert.x4中基于Future的API 100 5.3.3與CompletionStageAPI的互操作 100 5.3.4使用Vert.xFuture特性實現的Collector Service 102 5.4反應式擴展 103 5.4.1RxJava的簡要說明 104 5.4.2RxJava與Vert.x 107 5.4.3用RxJava實現的CollectorService 108 5.5Kotlin協程 111 5.5.1什么是協程 111 5.5.2Vert.x與Kotlin的協程 112 5.5.3使用協程實現邊緣服務 113 5.6究竟應該用哪一種模型 115 5.7本章小結 116 第6章不只是事件總線 117 6.1用服務API重新實現溫度傳感器 117 6.2RPC的回歸 118 6.3定義服務接口 119 6.4服務的實現 121 6.5啟用Proxy代碼自動生成 122 6.6部署事件總線服務 122 6.7回調之外的服務代理 123 6.8Vert.x中的測試 125 6.8.1在Vert.x中使用JUnit5 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.2JWT令牌中有 什么 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.1Vue.js 165 8.4.2Vue.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.1Vert.x為我們提供了什么 178 9.1.2我們會用到的中間件和服務 179 9.1.3AMQP和MessageBroker簡介 179 9.1.4Kafka簡介 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.1EclipseVert.x支持的數據庫客戶端 198 10.1.2數據對象映射并非必需 199 10.2使用MongoDB的用戶資料服務 200 10.2.1數據模型 200 10.2.2用戶資料APIVerticle及其初始化 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.3Web應用程序基于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.3HeatAPI 269 13.1.4部署本地集群 271 13.2讓服務運行在Kubernetes中 275 13.2.1構建容器鏡像 276 13.2.2集群與Kubernetes 278 13.2.3Kubernetes的部署描述文件 280 13.3Kubernetes中的一等公民 284 13.3.1健康檢查 284 13.3.2數據指標 288 13.4是結束也是開始 291 13.5本章小結 291 主要內容
● 如何構建反應式的服務 ● 如何對外部服務的故障做出響應 ● 如何進行水平擴展 ● Vert.x工具包的架構及其測試方式 ● 如何基于Docker和Kubernetes部署服務 時間回到2012年的一天,我正坐在一個舒適的電影院里參加Devoxx Belgium(在比利時召開的一年一度的Java開發者大會)。在我計劃參加的眾多會議里,有一場讓我遇到了Tim Fox。他在這場會議中介紹了他的一個新項目——Vert.x。當時的Node.js正如日中天,回歸異步編程成為所有涉及可擴展性問題的神奇解決方案。通過Tim那天的演講,我(和許多其他與會者)確信他已經為JVM上的異步編程奠定了堅實的基礎:Vert.x既包含Java生態系統的力量,又吸收了Node.js的優秀思想。使用Vert.x,可以拋開那些復雜的基于注解的框架和應用程序服務,轉而編寫簡單的Java代碼,這一點當時給我留下了深刻的印象。Vert.x就像一股新鮮空氣。從那以后,我一直關注著這個項目。時間快進到幾年以后:現在的我已經在Red Hat的Vert.x團隊中工作了,這在2012年時我是不敢想象的!
在應用程序被部署到虛擬化環境和容器的時代,Vert.x變得越來越有意義。如今,我們對應用程序提出了很多期望:它應當能夠擴展或收縮規模以適應波動的流量,且具有低延遲性,在其他系統出現故障時具備回彈能力,還可將盡可能多的應用程序打包到指定的服務器上。簡而言之,我們需要的是資源高效、便于擴展且可靠的應用程序。 這正是反應式應用程序的意義所在:隨著工作負載的增加和故障的發生,反應式應用程序的響應延遲始終都在可控范圍內。Vert.x是構建這類反應式應用程序的堅實基礎,但Vert.x本身并不是靈丹妙藥。反應式應用程序的構建并不簡單,開發人員不太可能像從貨架上取貨那樣將它拿起來就用。在設計和開發反應式應用程序時,還需要一些方法論。 本書將探討如何使用Vert.x編寫反應式應用程序。在這個過程中,我們不僅會學習Vert.x,還會討論一些關于異步編程的基礎知識,并且學習如何評估一個應用程序是否真正實現了反應式。最后,也是很重要的一點:Vert.x很有趣,通過它的簡單性,以及忘掉一些所謂的“最佳實踐”,你會發現這是一場解放。 |