前言
第1章 微服務(wù)架構(gòu)介紹1
1.1 微服務(wù)架構(gòu)的出現(xiàn)1
1.1.1 單體應(yīng)用架構(gòu)1
1.1.2 SOA架構(gòu)2
1.1.3 微服務(wù)架構(gòu)3
1.2 微服務(wù)架構(gòu)的流派5
1.3 云原生與微服務(wù)9
1.4 本章小結(jié)12
第2章 Spring Cloud總覽13
2.1 Spring Cloud架構(gòu)13
2.2 Spring Cloud特性16
2.2.1 Spring Cloud Context:應(yīng)用上下文16
2.2.2 Spring Cloud Commons:公共抽象19
2.3 本章小結(jié)21
第3章 Spring Cloud的基礎(chǔ):Spring Boot22
3.1 Spring Boot簡介22
3.2 構(gòu)建一個(gè)微服務(wù)24
3.3 Spring Boot配置文件29
3.3.1 默認(rèn)配置文件29
3.3.2 外部化配置29
3.3.3 YAML30
3.3.4 自動(dòng)載入外部屬性到Bean30
3.3.5 多Profile31
3.3.6 Starter32
3.3.7 自制一個(gè)Starter32
3.3.8 Actuator36
3.4 本章小結(jié)38
第4章 服務(wù)注冊(cè)與發(fā)現(xiàn):Eureka39
4.1 基礎(chǔ)應(yīng)用40
4.1.1 Eureka簡介40
4.1.2 搭建Eureka服務(wù)注冊(cè)中心40
4.1.3 搭建Eureka服務(wù)提供者42
4.1.4 搭建Eureka服務(wù)調(diào)用者43
4.1.5 Eureka服務(wù)注冊(cè)和發(fā)現(xiàn)44
4.1.6 Consul的簡單應(yīng)用46
4.2 服務(wù)發(fā)現(xiàn)原理48
4.3 Eureka Client源碼解析49
4.3.1 讀取應(yīng)用自身配置信息50
4.3.2 服務(wù)發(fā)現(xiàn)客戶端52
4.3.3 拉取注冊(cè)表信息56
4.3.4 服務(wù)注冊(cè)61
4.3.5 初始化定時(shí)任務(wù)62
4.3.6 服務(wù)下線68
4.4 Eureka Server源碼解析70
4.4.1 服務(wù)實(shí)例注冊(cè)表70
4.4.2 服務(wù)注冊(cè)72
4.4.3 接受服務(wù)心跳74
4.4.4 服務(wù)剔除75
4.4.5 服務(wù)下線77
4.4.6 集群同步78
4.4.7 獲取注冊(cè)表中服務(wù)實(shí)例信息82
4.5 進(jìn)階應(yīng)用84
4.5.1 Eureka Instance和Client的元數(shù)據(jù)84
4.5.2 狀態(tài)頁和健康檢查頁端口設(shè)置85
4.5.3 區(qū)域與可用區(qū)85
4.5.4 高可用性服務(wù)注冊(cè)中心86
4.6 本章小結(jié)87
第5章 聲明式RESTful客戶端:Spring Cloud OpenFeign88
5.1 基礎(chǔ)應(yīng)用88
5.1.1 微服務(wù)之間的交互88
5.1.2 OpenFeign簡介89
5.1.3 代碼示例89
5.2 源碼分析91
5.2.1 核心組件與概念91
5.2.2 動(dòng)態(tài)注冊(cè)BeanDefinition92
5.2.3 實(shí)例初始化98
5.2.4 函數(shù)調(diào)用和網(wǎng)絡(luò)請(qǐng)求107
5.3 進(jìn)階應(yīng)用111
5.3.1 Decoder與Encoder的定制化111
5.3.2 請(qǐng)求/響應(yīng)壓縮112
5.4 本章小結(jié)113
第6章 斷路器:Hystrix114
6.1 基礎(chǔ)應(yīng)用114
6.1.1 RestTemplate與Hystrix115
6.1.2 OpenFeign與Hystrix117
6.2 Hystrix原理118
6.2.1 服務(wù)雪崩118
6.2.2 斷路器119
6.2.3 服務(wù)降級(jí)操作120
6.2.4 資源隔離121
6.2.5 Hystrix實(shí)現(xiàn)思路122
6.3 源碼解析123
6.3.1 封裝HystrixCommand123
6.3.2 HystrixCommand類結(jié)構(gòu)129
6.3.3 異步回調(diào)執(zhí)行命令129
6.3.4 異步執(zhí)行命令和同步執(zhí)行命令137
6.3.5 斷路器邏輯137
6.3.6 資源隔離143
6.3.7 請(qǐng)求超時(shí)監(jiān)控148
6.3.8 失敗回滾邏輯150
6.4 進(jìn)階應(yīng)用152
6.4.1 異步與異步回調(diào)執(zhí)行命令152
6.4.2 繼承HystrixCommand153
6.4.3 請(qǐng)求合并157
6.5 本章小結(jié)161
第7章 客戶端負(fù)載均衡器:Spring Cloud Netflix Ribbon162
7.1 負(fù)載均衡162
7.2 基礎(chǔ)應(yīng)用163
7.3 源碼分析165
7.3.1 配置和實(shí)例初始化165
7.3.2 與OpenFeign的集成167
7.3.3 負(fù)載均衡器LoadBalancerClient171
7.3.4 ILoadBalancer173
7.3.5 負(fù)載均衡策略實(shí)現(xiàn)177
7.4 進(jìn)階應(yīng)用184
7.4.1 Ribbon API184
7.4.2 使用Netty發(fā)送網(wǎng)絡(luò)請(qǐng)求185
7.4.3 只讀數(shù)據(jù)庫的負(fù)載均衡實(shí)現(xiàn)186
7.5 本章小結(jié)187
第8章 API網(wǎng)關(guān):Spring Cloud Gateway189
8.1 Spring Cloud Gateway介紹189
8.2 基礎(chǔ)應(yīng)用190
8.2.1 用戶服務(wù)191
8.2.2 網(wǎng)關(guān)服務(wù)192
8.2.3 客戶端的訪問195
8.3 源碼解析195
8.3.1 初始化配置196
8.3.2 網(wǎng)關(guān)處理器197
8.3.3 路由定義定位器202
8.3.4 路由定位器205
8.3.5 路由斷言208
8.3.6 網(wǎng)關(guān)過濾器216
8.3.7 全局過濾器227
8.3.8 API端點(diǎn)234
8.4 應(yīng)用進(jìn)階235
8.4.1 限流機(jī)制235
8.4.2 熔斷降級(jí)238
8.4.3 網(wǎng)關(guān)重試過濾器240
8.5 本章小結(jié)241
第9章 配置中心:Spring Cloud Config243
9.1 基礎(chǔ)應(yīng)用244
9.1.1 配置客戶端244
9.1.2 配置倉庫245
9.1.3 服務(wù)端246
9.1.4 配置驗(yàn)證248
9.1.5 配置動(dòng)態(tài)更新249
9.2 源碼解析250
9.2.1 配置服務(wù)器251
9.2.2 配置客戶端261
9.3 應(yīng)用進(jìn)階267
9.3.1 為Config Server配置多個(gè)repo268
9.3.2 客戶端覆寫遠(yuǎn)端的配置屬性268
9.3.3 屬性覆蓋269
9.3.4 安全保護(hù)269
9.3.5 加密解密270
9.3.6 快速響應(yīng)失敗與重試機(jī)制272
9.4 本章小結(jié)272
第10章 消息驅(qū)動(dòng):Spring Cloud Stream274
10.1 消息隊(duì)列274
10.2 基礎(chǔ)應(yīng)用276
10.2.1 聲明和綁定通道276
10.2.2 自定義通道276
10.2.3 接收消息276
10.2.4 配置278
10.3 源碼分析278
10.3.1 動(dòng)態(tài)注冊(cè)BeanDefinition279
10.3.2 綁定服務(wù)282
10.3.3 獲取綁定器284
10.3.4 綁定生產(chǎn)者289
10.3.5 消息發(fā)送的流程291
10.3.6 StreamListener注解的處理293
10.3.7 綁定消費(fèi)者298
10.3.8 消息的接收304
10.4 進(jìn)階應(yīng)用306
10.4.1 Binder For RocketMQ306
10.4.2 多實(shí)例311
10.4.3 分區(qū)311
10.5 本章小結(jié)313
第11章 消息總線:Spring Cloud Bus314
11.1 基礎(chǔ)應(yīng)用314
11.1.1 配置服務(wù)器315
11.1.2 配置客戶端316
11.1.3 結(jié)果驗(yàn)證316
11.2 源碼解析318
11.2.1 事件的定義與事件監(jiān)聽器319
11.2.2 消息的訂閱與發(fā)布326
11.2.3 控制端點(diǎn)328
11.3 應(yīng)用進(jìn)階329
11.3.1 在自定義的包中注冊(cè)事件329
11.3.2 自定義監(jiān)聽器330
11.3.3 事件的發(fā)起者331
11.4 本章小結(jié)332
第12章 認(rèn)證與授權(quán):Spring Cloud Security333
12.1 基礎(chǔ)應(yīng)用333
12.1.1 OAuth2簡介334
12.1.2 JWT336
12.1.3 搭建授權(quán)服務(wù)器338
12.1.4 配置資源服務(wù)器341
12.1.5 訪問受限資源344
12.2 整體架構(gòu)346
12.3 源碼解析348
12.3.1 安全上下文349
12.3.2 認(rèn)證350
12.3.3 授權(quán)357
12.3.4 Spring Security中的過濾器與攔截器361
12.3.5 授權(quán)服務(wù)器372
12.3.6 資源服務(wù)器387
12.3.7 令牌中繼機(jī)制394
12.4 進(jìn)階應(yīng)用395
12.4.1 Spring Security定制395
12.4.2 OAuth2定制399
12.4.3 SSO單點(diǎn)登錄403
12.5 本章小結(jié)406
第13章 服務(wù)鏈路追蹤:Spring Cloud Sleuth407
13.1 鏈路監(jiān)控組件簡介407
13.2 基礎(chǔ)應(yīng)用410
13.2.1 特性411
13.2.2 項(xiàng)目準(zhǔn)備411
13.2.3 Spring Cloud Sleuth獨(dú)立實(shí)現(xiàn)414
13.2.4 集成Zipkin414
13.3 本章小結(jié)420