Java 微服務實戰 Java微服务实战

趙計剛

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

商品描述

本書分為三部分:基礎框架篇(1~6章)、服務框架篇(7~10章)、監控部署篇(11~13章),由淺入深來講解微服務的相關技術。基礎框架篇從微服務架構的基本概念與技術選型出發,詳細的介紹了微服務基礎框架SpringBoot、自動化API文檔生成工具Swagger、動態數據源和緩存系統,並深入的分析了SpringBoot啟動過程的核心源碼,這一部分是整本書的基礎;服務框架篇詳細的介紹了服務註冊與發現框架Consul、熱配置管理框架Archaius、服務降級容錯框架Hystrix,以及服務通信框架OkHttp、AsyncHttpClient和Retrofit,這一部分是整本書的核心;監控部署篇詳細的介紹了ELK日誌系統的實現、Zipkin全鏈路追蹤系統的實現,最後介紹了持續集成與持續部署系統的實現,這一部分是開發運維的部分。

作者簡介

趙計剛,現任網易高級Java開發工程師。2016年7月畢業於哈爾濱工業大學軟件學院。2016年3月加入51信用卡,開始接觸微服務架構,之後一直在從事微服務的開發與研究,學習與總結了不少微服務架構相關的理論與實踐經驗。個人是開源技術的擁躉,對新技術充滿濃厚的興趣,尤其是微服務架構相關技術。

目錄大綱

第1章微服務概述1 
1.1初識微服務1 
1.1.1什麼是微服務1 
1.1.2為什麼需要微服務2 
1.1.3微服務架構的缺點3 
1.2微服務中的組件與技術選型4 

第2章微服務基礎框架10 
2.1 SpringBoot的優勢10 
2.2 SpringBoot入門10 
2.2.1搭建項目框架10 
2.2.2開發第一個SpringBoot程序11 
2.2.3運行SpringBoot項目14 
2.3再學一招:使用Maven依賴樹驗證SpringBoot自動引包功能15 

第3章微服務文檔輸出17 
3.1 Swagger概述17 
3.2如何使用Swagger 17 
3.2.1搭建項目框架17 
3.2.2 SpringBoot集成Swagger 18 
3.2.3分析Swagger生成的API文檔23 
3.2 .4使用Swagger進行接口調用23 
3.3再學一招:使用Lombok消除POJO類模板代碼24 

第4章微服務數據庫26 
4.1單數據源26 
4.1.1搭建項目框架26 
4.1.2建庫和建表27 
4.1.3使用Mybatis-Generator生成數據訪問層27
4.1.4 SpringBoot集成Mybatis 29 
4.2多數據源38 
4.2.1建庫和建表39 
4.2.2使用Mybatis-Generator生成數據訪問層40 
4.2.3結合AbstractRoutingDataSource實現動態數據源41 
4.2.4使用AOP簡化數據源選擇功能47 
4.2.5實現多數據源的步驟總結48 
4.3再學一招:Mybatis-Generator基本用法49 

第5章微服務緩存系統52 
5.1常用的緩存技術52 
5.1.1本地緩存與分佈式緩存52 
5.1.2 Memcached與Redis 53 
5.2 Redis2.x客戶端分片53 
5.2.1安裝Redis 53 
5.2.2 SpringBoot集成ShardJedis 54 
5.3 Redis3.x集群59 
5.3.1搭建Redis集群59 
5.3.2 SpringBoot集成JedisCluster 62 
5.3.3 JedisCluster關鍵源碼解析64 
5.4再學一招:使用GuavaCache實現本地緩存66 

第6章SpringBoot啟動源碼解析69 
6.1創建SpringApplication實例70 
6.1.1判斷是否是Web環境71
6.1.2創建並初始化ApplicationInitializer列表71 
6.1.3創建並初始化ApplicationListener列表74 
6.1.4初始化主類mainApplicationClass 75 
6.2添加自定義監聽器75 
6.3啟動核心run方法76 
6.3.1創建啟動停止計時器77 
6.3. 2配置awt系統屬性78 
6.3.3獲取SpringApplicationRunListeners 79 
6.3.4啟動SpringApplicationRunListener 80 
6.3.5創建ApplicationArguments 80 
6.3.6創建並初始化ConfigurableEnvironment 81 
6.3.7打印Banner 87 
6.3.8創建ConfigurableApplicationContext 87 
6.3.9準備ConfigurableApplicationContext 89 
6.3.10刷新ConfigurableApplicationContext 91 
6.3.11容器刷新後動作93 
6.3.12 SpringApplicationRunListeners發布finish事件94 
6.3.13計時器停止計時94 
6.4再學一招:常用的獲取屬性的4種姿勢94 

第7章微服務註冊與發現96
7.1初識Consul 96 
7.2搭建Consul集群97 
7.2.1安裝Consul 97 
7.2.2啟動Consul集群97 
7.2.3啟動Consul-UI 99 
7.3使用Consul實現服務註冊與服務發現100 
7.3.1搭建項目框架100 
7.3. 2配置服務註冊信息102 
7.3.3實現服務啟動註冊104 
7.3.4實現服務發現106 
7.4服務部署測試108 
7.4.1編寫測試類108 
7.4.2服務打包部署109 
7.4.3運行測試111 
7.5使用Consul與Actuator實現健康檢查111 
7.5.1健康檢查機制111 
7.5.2健康檢查查錯思路111 
7.6再學一招:Consul健康檢查分類及原理112 

第8章微服務配置管理114 
8.1初識Archaius 114 
8.1.1為什麼要使用Archaius 114 
8.1.2 Archaius原理114 
8.2使用Consul-KV實現配置集中管理115 
8.3使用Archaius實現動態獲取配置116 
8.3.1搭建項目框架116 
8.3.2創建配置信息讀取源118
8.3.3實現服務啟動時讀取配置信息120 
8.3.4動態獲取配置信息122 
8.3.5將配置信息動態加入Spring屬性源的思路123 
8.4再學一招:Archaius關鍵源碼解析123 
8.4.1構造動態屬性源123 
8.4.2動態獲取屬性127 

第9章微服務進程間通信129 
9.1常見的三種服務通信技術129 
9.2創建一個簡單的被調用服務130 
9.2.1搭建項目框架130 
9.2.2實現一個簡單的被調用接口132 
9.3使用OkHttp實現服務通信134 
9.3.1搭建項目框架134 
9.3.2創建OkHttp調用實體類135 
9.3.3實現服務通信功能136 
9.3.4 SpringBoot指定服務啟動端口的三種姿勢138 
9.4使用AsyncHttpClient實現服務通信139 
9.4.1搭建項目框架139 
9.4.2創建AsyncHttpClient調用實體類139 
9.4.3實現服務通信功能140 
9.5使用Retrofit實現服務通信141 
9.5.1搭建項目框架141 
9.5.2創建調用接口並實例化接口141 
9.5.3實現服務通信功能143
9.6再學一招:Retrofit源碼解析143 
9.6.1構造RestAdapter 144 
9.6.2初始化RestAdapter.Builder屬性146 
9.6.3創建RestAdapter實例149 
9.6.4構造請求方法的接口類150 
9.6.5校驗service接口的合法性151 
9.6.6使用動態代理創建對象152 
9.6.7進行請求調用152 
9.6.8獲取RestMethodInfo實例154 
9.6.9進行方法調用154 
9.6.10加載RestMethodInfo的剩餘屬性156 
9.6.11構建請求參數retrofit. client.Request 160 
9.6.12利用clientProvider進行真正的調用161 
9.6.13處理響應162 

第10章微服務降級容錯163 
10.1初識Hystrix 163 
10.1.1為什麼要使用Hystrix 163 
10.1.2 Hystrix工作原理164 
10.1. 3 Hystrix執行流程166 
10.2使用Hystrix實現服務降級容錯167 
10.2.1搭建項目框架167 
10.2.2創建AsyncHttpClient調用實體類170 
10.2.3服務通信框架集成服務降級容錯功能171
10.2.4驗證服務降級容錯功能173 
10.3搭建Hystrix監控系統176 
10.3.1使用Hystrix-Metrics-Event-Stream發布監控信息176 
10.3.2使用Hystrix-Dashboard展示監控信息177 
10.3.3使用Turbine聚合監控信息179 
10.1再學一招:Hystrix常用配置184 
10.1.1設置配置參數的兩種方法184 
10.4.2常見配置項的配置方式184 

第11章微服務日誌系統187 
11.1初識ELK 187 
11.1.1為什麼要用ELK 187 
11.1.2 ELK最常用的兩種架構188 
11.2搭建ELK系統189 
11.2.1安裝配置啟動Redis 190 
11.2.2安裝配置啟動Elasticsearch 190 
11.2.3安裝配置啟動Logstash-Shipper 192 
11.2.4安裝配置啟動Logstash-Indexer 194 
11.2.5安裝配置啟動Kibana 195 
11.3使用LogbackAppender發送日誌196 
11.3.1搭建項目框架196 
11.3.2配置logback.xml文件198 
11.3.3創建LogbackAppender發送日誌199
11.3.4驗證日誌輸出查詢功能201 
11.4 Kibana常見用法203 
11.4.1日期選擇203 
11.4.2自動刷新204 
11.4.3查詢語法204 
11.5再學一招:使用Curator定時刪除日誌205 
11.5.1安裝Curator 205 
11.5.2配置Curator 206 
11.5.3配置crontab定時任務208 
11.5.4驗證定時任務208 

第12章微服務全鏈路追踪系統210 
12.1初識Zipkin 210 
12.1.1為什麼要使用Zipkin 210 
12.1.2 Zipkin工作流程211 
12.1.3 Zipkin數據模型213 
12.1.4 Zipkin工作原理213 
12.2使用Zipkin搭建全鏈路追踪系統215 
12.3使用Brave + AsyncHttpClient實現全鏈路追踪217 
12.3.1搭建項目框架217 
12.3.2使用服務端攔截器補充追踪信息219 
12.3.3使用客戶端攔截器創建銷毀追踪信息223 
12.3.4使用Zipkin-webUI查詢鏈路追踪信息225 
12.4使用MySQL持久化追踪信息227 
12.4.1創建三張追踪信息表227
12.4.2使用Brave-MySQL存儲追踪信息230 
12.5使用Brave-OkHttp實現全鏈路追踪230 
12.5.1搭建項目框架231 
12.5.2使用服務端與客戶端攔截器收集追踪信息233 
12.6再學一招: Brave關鍵源碼解析236 
12.6.1 span的生命週期236 
12.6.2使用reporter創建span 237 
12.6.3使用collector收集span 242 
12.6.4使用collector發送span 244 

第13章微服務持續集成與持續部署系統248 
13.1初識持續集成與持續部署系統248 
13.2系統總體架構249 
13.2.1初識GitLab 249 
13.2.2初識Jenkins 250 
13.2.3初識Docker-Regsitry 250 
13.3持續集成與持續部署系統工作原理250 
13.3.1使用jar包部署項目的整體流程250 
13.3.2使用Docker鏡像部署項目的整體流程250 
13.4搭建持續集成與持續部署系統251 
13.4.1安裝啟動Docker 251 
13.4.2安裝配置啟動GitLab 252 
13.4.3安裝啟動Jenkins 254 
13.4.4配置Jenkins全局信息與安裝插件256
13.4.5安裝配置啟動Docker-Registry 257 
13.5使用jar包方式部署服務258 
13.5.1搭建項目框架258 
13.5.2使用GitLab創建組和項目260 
13.5.3使用GitLab管理代碼263 
13.5.4使用Jenkins編譯打包服務264 
13.5.5使用webhook實現服務的持續集成267 
13.5.6使用Jenkins + Shell實現服務的持續部署269 
13.6使用Docker鏡像方式部署服務273 
13.6.1搭建項目框架273 
13.6.2編寫Dockerfile文件創建鏡像275 
13.6.3通過Jenkins + Shell使用鏡像實現持續部署276 
13.6.4分析Jenkins構建日誌277 
13.7再學一招:Docker常用命令278