微服務項目實戰派——從Spring Boot到Spring Cloud( 簡體 字) | |
作者:姜橋 | 類別:1. -> 程式設計 -> JAVA -> Spring |
出版社:電子工業出版社 | 3dWoo書號: 55429 詢問書籍請說出此書號! 缺書 NT售價: 695 元 |
出版日:11/1/2021 | |
頁數:552 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787121422676 | 【不接受訂購】 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1章 基礎
——從Spring Boot單體應用到Spring Cloud微服務 1 1.1 微服務的概念 2 1.1.1 什么是微服務 2 1.1.2 從單體應用到微服務 2 1.1.3 主流的微服務技術棧 4 1.2 Spring Boot框架基礎 5 1.2.1 Spring Boot簡介 5 1.2.2 Spring Boot的核心原理 6 1.2.3 Spring Boot的核心注解 12 1.3 開發一個Spring Boot應用 19 1.3.1 【步驟1】創建Spring Boot基礎工程 19 1.3.2 【步驟2】創建項目配置文件 22 1.3.3 【步驟3】集成MyBatis框架 22 1.3.4 【步驟4】編寫服務接口完成數據庫操作 24 1.4 Spring Cloud微服務體系 27 1.4.1 Spring Cloud簡介 27 1.4.2 Spring Boot與Spring Cloud的關系 28 1.4.3 Spring Cloud微服務的核心組件 28 1.4.4 Spring Cloud的核心注解 30 1.4.5 Spring Cloud的技術生態圈 34 1.5 本章小結 35 第2章 【實例】用戶系統 ——用Spring Boot開發應用,用Spring Cloud將其改為微服務架構 36 2.1 功能概述 37 2.2 系統設計 37 2.2.1 業務邏輯設計 37 2.2.2 數據庫設計 40 2.3 【步驟1】搭建Spring Boot應用的工程代碼 41 2.3.1 創建Spring Boot應用工程 41 2.3.2 創建應用的配置文件 43 2.3.3 集成數據庫訪問框架MyBatis 44 2.3.4 集成緩存數據庫Redis 47 2.4 【步驟2】用Spring Boot實現業務邏輯 49 2.4.1 定義用戶微服務服務接口層(Controller層) 49 2.4.2 開發用戶微服務業務層(Service層)代碼 52 2.4.3 開發MyBatis持久層(Dao層)組件 55 2.5 【步驟3】將Spring Boot應用升級為Spring Cloud微服務 59 2.5.1 部署服務注冊中心Consul 59 2.5.2 對Spring Boot應用進行微服務改造 60 2.5.3 將Spring Cloud微服務注入服務注冊中心Consul 63 2.6 本章小結 65 第3章 【實例】SSO授權認證系統 ——用“Spring Security + Spring Cloud Gateway”構建OAuth 2.0授權認證服務 66 3.1 功能概述 67 3.2 系統設計 67 3.2.1 OAuth 2.0授權認證流程 67 3.2.2 系統結構設計 70 3.2.3 數據庫設計 71 3.3 【步驟1】構建Spring Cloud授權認證微服務 75 3.3.1 創建Spring Cloud微服務工程 75 3.3.2 將Spring Cloud微服務注入服務注冊中心Consul 77 3.3.3 集成JDBC數據源,以訪問MySQL數據庫 77 3.3.4 構建OAuth 2.0授權認證微服務 79 3.3.5 開發調用資源微服務的FeignClient代碼 88 3.3.6 開發授權認證的自定義登錄界面 93 3.4 【步驟2】構建Spring Cloud資源微服務 96 3.4.1 創建Spring Cloud微服務工程 96 3.4.2 將Spring Cloud微服務注入Consul 98 3.4.3 集成MyBatis框架,以訪問MySQL數據庫 98 3.4.4 構建OAuth 2.0資源微服務 99 3.4.5 實現“用戶受保護信息查詢”的業務邏輯 102 3.5 【步驟3】搭建基于Spring Cloud Gateway的服務網關 115 3.5.1 認識微服務網關 115 3.5.2 了解常見的服務網關組件 116 3.5.3 服務網關的具體構建 117 3.5.4 添加安全認證機制 118 3.6 【步驟4】演示OAuth 2.0授權認證流程 120 3.6.1 編寫注冊Client端系統的SQL語句 120 3.6.2 演示用戶授權認證登錄的過程 121 3.6.3 通過微服務網關訪問OAuth資源微服務 124 3.7 本章小結 124 第4章 【實例】車輛電子圍欄系統 ——用“PostgreSQL + PostGis”實現電子圍欄服務,并利用配置中心管理微服務 的多環境配置信息 125 4.1 功能概述 126 4.2 系統設計 126 4.2.1 系統結構設計 126 4.2.2 數據庫設計 127 4.3 【步驟1】構建Spring Cloud微服務工程代碼 130 4.3.1 搭建“PostgreSQL + PostGIS”數據庫環境 130 4.3.2 創建Spring Cloud微服務工程 131 4.3.3 將Spring Cloud微服務注入Consul 133 4.3.4 集成MyBatis,以訪問PostgreSQL數據庫 134 4.3.5 通過MyBatis-Plus簡化MyBatis的操作 135 4.4 【步驟2】實現微服務的業務邏輯 137 4.4.1 定義服務接口層(Controller層) 137 4.4.2 開發業務層(Service層)代碼 149 4.4.3 開發MyBatis持久層(Dao層)組件 165 4.5 【步驟3】演示電子圍欄微服務的簡單操作 173 4.5.1 通過地圖工具,定義電子圍欄的GeoJson信息 173 4.5.2 演示電子圍欄微服務的簡單操作 174 4.6 【步驟4】使用Spring Cloud ConfigServer配置中心 179 4.6.1 構建Spring Cloud ConfigServer配置中心微服務 179 4.6.2 將微服務接入Config配置中心 181 4.6.3 利用配置中心管理微服務的多環境配置 183 4.7 本章小結 184 第5章 【實例】電子錢包系統 ——用“Feign + Ribbon + Hystrix + Vue.js + Docker”實現微服務的 “負載調用 + 熔斷降級 + 部署” 185 5.1 功能概述 186 5.2 系統設計 186 5.2.1 系統流程設計 187 5.2.2 系統結構設計 188 5.2.3 數據庫設計 189 5.3 【步驟1】構建Spring Cloud微服務工程代碼 191 5.3.1 創建Spring Cloud微服務工程 191 5.3.2 將Spring Cloud微服務注入Consul 192 5.3.3 集成MyBatis,以訪問MySQL數據庫 193 5.3.4 通過MyBatis-Plus簡化MyBatis的操作 193 5.4 【步驟2】實現微服務的業務邏輯 194 5.4.1 定義服務接口層(Controller層) 194 5.4.2 開發業務層(Service層)的代碼 202 5.4.3 開發MyBatis持久層(Dao層)組件 220 5.5 【步驟3】集成“Feign + Ribbon + Hystrix”實現微服務的“遠程通信 + 負載調用 + 熔斷降級” 225 5.5.1 集成微服務通信組件“Feign + Ribbon” 226 5.5.2 開發調用“支付微服務”的FeignClient客戶端代碼 226 5.5.3 微服務熔斷降級的概念 230 5.5.4 集成Hystrix實現微服務的熔斷降級 231 5.5.5 測試Hystrix熔斷降級的生效情況 234 5.6 【步驟4】基于Vue.js開發電子錢包微服務的充值界面 238 5.6.1 認識Vue.js 238 5.6.2 搭建Node.js環境 238 5.6.3 創建電子錢包微服務的Vue.js前端工程 239 5.6.4 編寫電子錢包微服務的前端功能 241 5.6.5 測試“電子錢包充值”前后端交互流程 246 5.7 【步驟5】用Docker部署Spring Cloud微服務 248 5.7.1 認識Docker 249 5.7.2 利用Dockerfile文件構建微服務鏡像 250 5.7.3 創建docker-compose.yml文件 252 5.7.4 通過Docker容器化部署微服務 254 5.8 本章小結 255 第6章 【實例】支付系統 ——用“Redis分布式鎖 + Mockito”實現微服務場景下的“支付邏輯 + 代碼測試” 256 6.1 功能概述 257 6.2 系統設計 257 6.2.1 支付流程設計 258 6.2.2 系統結構設計 260 6.2.3 數據庫設計 261 6.3 【步驟1】構建Spring Cloud微服務工程代碼 264 6.3.1 創建Spring Cloud微服務工程 264 6.3.2 將Spring Cloud微服務注入Consul 265 6.3.3 集成MyBatis,以訪問MySQL數據庫 266 6.3.4 通過MyBatis-Plus簡化MyBatis的操作 266 6.4 【步驟2】實現基于Redis的分布式鎖 267 6.4.1 配置Redis服務 267 6.4.2 集成Redis客戶端訪問組件 268 6.4.3 理解Redis分布式鎖的原理 269 6.4.4 實現Redis分布式鎖的客戶端代碼 271 6.5 【步驟3】實現微服務的業務邏輯 273 6.5.1 定義服務接口層(Controller層) 273 6.5.2 開發業務層(Service層)代碼 281 6.5.3 開發MyBatis持久層(Dao層)組件 292 6.6 【步驟4】接入“支付寶”渠道 298 6.6.1 申請支付寶沙箱環境 298 6.6.2 開發接入支付寶支付的代碼 300 6.6.3 測試“支付寶電腦網頁支付”接口 303 6.6.4 測試支付寶“渠道支付結果通知”的邏輯 306 6.7 【步驟5】進行Spring Cloud 微服務代碼單元測試 307 6.7.1 認識單元測試 307 6.7.2 開發Mockito單元測試代碼 308 6.8 本章小結 312 第7章 【實例】A/B測試系統 ——用“Spring Boot Starter機制 + Caffeine緩存”實現A/B流量切分 313 7.1 功能概述 314 7.2 系統設計 314 7.2.1 系統流程設計 314 7.2.2 系統結構設計 316 7.2.3 數據庫設計 317 7.3 【步驟1】構建Spring Cloud微服務工程代碼 319 7.3.1 創建Spring Cloud微服務工程 320 7.3.2 將Spring Cloud微服務注入Consul 321 7.3.3 集成MyBatis,以訪問MySQL數據庫 322 7.3.4 通過MyBatis-Plus簡化MyBatis的操作 323 7.4 【步驟2】集成高性能本地緩存Caffeine 323 7.4.1 引入Caffeine的依賴 324 7.4.2 開發Caffeine的配置類代碼 324 7.4.3 演示Caffeine的使用效果 326 7.5 【步驟3】實現微服務的業務邏輯 329 7.5.1 定義服務接口層(Controller層) 329 7.5.2 開發業務層(Service層)的代碼 345 7.5.3 開發MyBatis持久層(Dao層)組件 366 7.6 【步驟4】基于Spring Boot Starter方式編寫“接入SDK” 374 7.6.1 創建Spring Boot Starter工程代碼 374 7.6.2 開發“接入SDK”的代碼 376 7.7 【步驟5】接入A/B測試微服務,實現灰度發布 385 7.7.1 創建A/B測試接入方微服務示例工程代碼 385 7.7.2 通過接口調用的方式創建A/B測試 386 7.7.3 開發A/B測試代碼,實現灰度流量切分 388 7.8 本章小結 394 第8章 【實例】分布式任務調度系統 ——用“ZooKeeper + ElasticJob”處理分布式任務 395 8.1 功能概述 396 8.2 【步驟1】構建分布式任務調度系統 396 8.2.1 認識分布式任務調度框架ElasticJob 396 8.2.2 搭建ZooKeeper分布式協調服務 398 8.2.3 部署ElasticJob的Console管理控制臺 400 8.3 【步驟2】實現Spring Cloud微服務分布式任務處理 403 8.3.1 創建Spring Cloud微服務工程 403 8.3.2 編寫ElasticJob的“接入SDK” 405 8.3.3 定義微服務分布式任務 412 8.4 本章總結 415 第9章 搭建微服務DevOps發布系統 ——用“GitLab + Harbor + Kubernetes”構建Spring Cloud微服務CI/CD自動化 發布體系 416 9.1 CI/CD概述 417 9.2 了解DevOps發布系統的設計流程 418 9.3 【基礎知識1】GitLab代碼倉庫 419 9.3.1 部署GitLab代碼倉庫 419 9.3.2 配置GitLab 郵箱通知 422 9.3.3 設置GitLab的 CI/CD功能 424 9.3.4 安裝Maven及Docker環境 430 9.4 【基礎知識2】Docker鏡像倉庫 430 9.4.1 Docker鏡像簡介 431 9.4.2 選擇Docker鏡像倉庫 431 9.4.3 部署Harbor私有鏡像倉庫 432 9.5 【基礎知識3】Kubernetes容器編排技術 436 9.5.1 Kubernetes簡介 437 9.5.2 搭建Kubernetes集群 438 9.5.3 Kubernetes的技術原理 453 9.6 自動化發布Spring Cloud微服務 457 9.6.1 創建Spring Cloud微服務的示例工程 457 9.6.2 配置Spring Cloud項目的Docker打包插件 459 9.6.3 準備GitLab CI/CD 服務器的Kubernetes環境 461 9.6.4 編寫Kubernetes的發布部署文件 462 9.6.5 定義Spring Cloud微服務的GitLab CI/CD流程 464 9.6.6 將微服務應用自動發布到Kubernetes集群中 466 9.7 本章小結 469 第10章 搭建微服務監控系統 ——用“Prometheus + Grafana + SkyWalking”實現度量指標監控及分布式鏈路追蹤 470 10.1 認識監控系統 471 10.1.1 監控對象及分層 471 10.1.2 常見的監控指標及類型 472 10.1.3 主流的監控系統及選型 475 10.2 【實戰】構建微服務度量指標監控系統 477 10.2.1 認識Prometheus 477 10.2.2 【步驟1】部署Prometheus Operator 481 10.2.3 【步驟2】演示Prometheus的Metrics(度量指標)監控效果 484 10.2.4 【步驟3】部署Grafana可視化監控系統 487 10.2.5 【步驟4】將Spring Cloud 微服務接入Prometheus 489 10.2.6 【步驟6】使用ServiceMonitor管理監控目標 510 10.2.7 【步驟7】構建基于Grafana的可視化監控界面 513 10.3 【實戰】構建微服務分布式鏈路追蹤系統 517 10.3.1 認識分布式鏈路追蹤 518 10.3.2 認識SkyWalking 520 10.3.3 【步驟1】部署SkyWalking 521 10.3.4 【步驟2】將Spring Cloud微服務接入SkyWalking 527 10.3.5 【步驟3】通過SkyWalking UI追蹤分布式鏈路 535 10.4 本章小結 537 隨著微服務概念的興起,如何快速實施微服務成了一個重要話題。在Java服務端領域,Spring Cloud微服務體系事實上已經成為整個Java后端架構的標配。如果你打算從事Java服務端開發,或者你所在公司正打算轉型微服務,那么Spring Cloud是無論如何都繞不開的存在。本書以項目實戰的形式來介紹Spring Cloud微服務體系。書中所有實例都來自作者多年工作實踐,內容覆蓋構建Spring Cloud微服務所需的絕大部分內容——包括微服務工程搭建、微服務網關、熔斷限流、分布式任務調度、自動化CI/CD構建、Kubernetes容器化部署、微服務監控系統、分布式鏈路追蹤等。
【寫作背景】
Spring Cloud微服務體系在國內真正落地是在2017年左右,那時我所在的公司——摩拜單車風頭正盛,后端系統也剛完成了從早期單體應用到Spring Cloud微服務架構的轉型。在這次大規模的微服務架構實踐中,我深刻感受到微服務架構給高速發展中的摩拜單車,在后端架構、系統負載、開發方式、組織架構等方面所帶來的好處。 于是,我便有了將這些實踐經驗通過文章輸出的想法,而當時我的同事兼好朋友、現在已經成為公眾號知名技術博主的“程序員小灰”在得知這個想法后,便鼓勵我開通微信公眾號“無敵碼農”。此后,我便陸續在公眾號上輸出了一些關于Spring Cloud微服務的實踐文章,而這些內容也得到了出版界老師的關注,這便是這本書寫作的由來。 寫作過程并非一帆風順。因為工作繁忙,所以本書的寫作從2019年4月整整持續了兩年多的時間。技術更新是非常快的,這樣的寫作時長存在著技術滯后的風險,不過幸好目前Spring Cloud微服務體系依然是主流,雖然新一代微服務架構Service Mesh也在迅猛發展,但短期內并不會完全取代Spring Cloud。 雖然寫作過程進展不快,但這也正好有了更多的思考時間,因此書稿內容也都處于持續優化中,根據技術的變化進行同步。所以,本書在技術上不僅不滯后,反而具有一定的前瞻性。 【本書特色】 本書以項目實例的形式來展示Spring Cloud微服務生命周期所涉及的技術,具有以下特點。 (1)精選業界普遍采用的技術方案進行詳細介紹。 雖然Spring Cloud微服務的技術生態非常豐富,但在實際應用中,并不是所有技術都是必需的。所以,本書并沒有像其他某些Spring Cloud圖書那樣囫圇式地將各個技術組件都介紹一遍,而是以目前互聯網業界普遍采用的技術方案進行詳細介紹。 例如,關于注冊中心的選擇,大部分互聯網公司并不會直接采用Eureka,而是會選擇性能更高、支持微服務數量規模更大的方案,如Consul或Nacos等。而對于像微服務的分布式鏈路追蹤方案,一般也不會選擇Spring Cloud Sleuth,而是選擇更流行的SkyWalking方案等。 (2)覆蓋Spring Cloud微服務體系的絕大部分內容。 本書覆蓋構建Spring Cloud微服務的絕大部分內容——包括微服務工程搭建、微服務網關、熔斷限流、分布式任務調度、自動化CI/CD構建、Kubernetes容器化部署、微服務監控系統、分布式鏈路追蹤等。 (3)循序漸進,實戰性強。 本書對于微服務技術并不是枯燥地敘述,而是根據每個項目實例的特點,“從原理到實踐”手把手地教學,并且每章的實例都可以獨立學習。書中實例都提供了完整的源碼,且精確到具體的包路徑。 (4)實例具有較強的實用參考性。 本書所有實例都是作者從多年的工作實踐中整理出來的真實項目,用戶系統、SSO授權系統、車輛電子圍欄系統、電子錢包系統、支付系統、A/B測試系統等,都是目前互聯網業務系統中真實存在的。本書給出了這些系統的詳細設計方案,以及具體代碼實現。 (5)代碼規范,注重編程思想的提煉。 本書實例中,注重編程規范及軟件分層架構。通過學習本書,讀者不僅能夠快速掌握Spring Cloud微服務開發技術,還能感受到良好的編程思想,從而在潛移默化中培養良好的編程習慣,提升編程水平。 (6)技術前瞻,緊跟發展潮流。 本書所涉及的技術具有一定的前瞻性,特別是最后兩章所涉及的Kubernetes容器編排、監控系統及分布式鏈路追蹤等內容,都是當前流行及今后會流行的技術,也是下一代微服務架構Service Mesh所依賴的平臺基礎。 由于筆者能力有限,錯漏之處在所難免,歡迎讀者批評、指正。 您也可以通過以下方式直接聯系作者: 關注微信公眾號“無敵碼農” 郵箱:1468325120@qq.com 【涉及的技術及版本】 本書所采用的技術及相關版本較新,請讀者將相關開發環境設置成與下方所列的配置,或不低于本書所列的配置。 -JDK 1.8。 -Apache Maven 3.6.1。 -Spring Boot 2.1.5.RELEASE。 -Spring Cloud Greenwich.SR1。 -Docker 19.03.5。 -Consul 1.9.1。 -MySQL 5.7。 -Redis 3.2。 -PostgresSQL 10.0。 -PostGIS 2.4。 -Spring Cloud Config Server 2.1.1. RELEASE。 -Spring Cloud Hystrix Dashboard 1.4.7.RELEASE。 -Vue 2.9.6。 -Npm 6.13.4。 -MyBatis Plus 3.3.0。 -Apache Zookeeper 3.7.0-bin。 -Elasticjob-Lite 3.0.0-RC1。 -Elasticjob-Lite-UI 3.0.0-RC1。 -Ubantu Linux 20.04 LTS。 -GitLab 13.2.2。 -Harbor 2.0.2。 -Kubernetes 1.18.1。 -Helm v3.4.0-rc.1。 -Prometheus-Operator 0.38.1。 -Prometheus 2.22.0 -SkyWalking OAP Server 8.3.0-es7。 -SkyWalking UI 8.3.0。 本書實例所采用的集成開發工具為IntelliJ IDEA ULTIMATE 2019.2。 姜橋 2021年8月 |