第1章 微服务与Spring Cloud 1
1.1 微服务架构概述 1
1.1.1 应用架构的发展 1
1.1.2 微服务架构 3
1.1.3 微服务解决方案 4
1.2 Spring Cloud与中间件 5
1.2.1 中间件概述 5
1.2.2 什么是Spring Cloud 5
1.2.3 Spring Cloud项目模块 5
1.2.4 Spring Cloud与服务治理中间件 6
1.2.5 Spring Cloud与配置中心中间件 6
1.2.6 Spring Cloud与网关中间件 8
1.2.7 Spring Cloud与全链路监控中间件 9
1.3 Spring Cloud增强生态 10
1.3.1 Spring Cloud分布式事务 10
1.3.2 Spring Cloud与领域驱动 10
1.3.3 Spring Cloud与gRPC 11
1.3.4 Spring Cloud与Dubbo生态融合 11
1.4 本章小结 11
第2章 Spring Cloud Eureka上篇 12
2.1 服务发现概述 12
2.1.1 服务发现由来 12
2.1.2 Eureka简介 14
2.1.3 服务发现技术选型 15
2.2 Spring Cloud Eureka入门案例 16
2.3 Eureka Server的REST API简介 20
2.3.1 REST API列表 20
2.3.2 REST API实例 20
2.4 本章小结 26
第3章 Spring Cloud Eureka下篇 27
3.1 Eureka的核心类 27
3.1.1 InstanceInfo 27
3.1.2 LeaseInfo 28
3.1.3 ServiceInstance 29
3.1.4 InstanceStatus 29
3.2 服务的核心操作 30
3.2.1 概述 30
3.2.2 LeaseManager 30
3.2.3 LookupService 31
3.3 Eureka的设计理念 31
3.3.1 概述 31
3.3.2 AP优于CP 32
3.3.3 Peer to Peer架构 33
3.3.4 Zone及Region设计 34
3.3.5 SELF PRESERVATION设计 36
3.4 Eureka参数调优及监控 36
3.4.1 核心参数 36
3.4.2 参数调优 39
3.4.3 指标监控 41
3.5 Eureka实战 42
3.5.1 Eureka Server在线扩容 42
3.5.2 构建Multi Zone Eureka Server 47
3.5.3 支持Remote Region 52
3.5.4 开启HTTP Basic认证 58
3.5.5 启用https 61
3.5.6 Eureka Admin 66
3.5.7 基于metadata路由实例 67
3.6 Eureka故障演练 69
3.6.1 Eureka Server全部不可用 69
3.6.2 Eureka Server部分不可用 71
3.6.3 Eureka高可用原理 73
3.7 本章小结 74
第4章 Spring Cloud Feign的使用扩展 75
4.1 Feign概述 75
4.1.1 什么是Feign 75
4.1.2 Feign的入门案例 76
4.1.3 Feign的工作原理 78
4.2 Feign的基础功能 79
4.2.1 FeignClient注解剖析 79
4.2.2 Feign开启GZIP压缩 79
4.2.3 Feign支持属性文件配置 80
4.2.4 Feign Client开启日志 81
4.2.5 Feign的超时设置 82
4.3 Feign的实战运用 83
4.3.1 Feign默认Client的替换 83
4.3.2 Feign的Post和Get的多参数传递 86
4.3.3 Feign的文件上传 90
4.3.4 解决Feign首次请求失败问题 92
4.3.5 Feign返回图片流处理方式 93
4.3.6 Feign调用传递Token 93
4.4 venus-cloud-feign设计与使用 94
4.4.1 venus-cloud-feign的设计 94
4.4.2 venus-cloud-feign的使用 96
4.5 本章小结 98
第5章 Spring Cloud Ribbon实战运用 99
5.1 Spring Cloud Ribbon概述 99
5.1.1 Ribbon与负载均衡 99
5.1.2 入门案例 100
5.2 Spring Cloud Ribbon实战 105
5.2.1 Ribbon负载均衡策略与自定义配置 105
5.2.2 Ribbon超时与重试 107
5.2.3 Ribbon的饥饿加载 108
5.2.4 利用配置文件自定义Ribbon客户端 108
5.2.5 Ribbon脱离Eureka的使用 108
5.3 Spring Cloud Ribbon进阶 109
5.3.1 核心工作原理 109
5.3.2 负载均衡策略源码导读 113
5.4 本章小结 114
第6章 Spring Cloud Hystrix实战运用 115
6.1 Spring Cloud Hystrix概述 115
6.1.1 解决什么问题 116
6.1.2 设计目标 117
6.2 Spring Cloud Hystrix实战运用 118
6.2.1 入门示例 118
6.2.2 Feign中使用断路器 120
6.2.3 Hystrix Dashboard 121
6.2.4 Turbine聚合Hystrix 124
6.2.5 Hystrix异常机制和处理 126
6.2.6 Hystrix配置说明 128
6.2.7 Hystrix线程调整和计算 129
6.2.8 Hystrix请求缓存 130
6.2.9 Hystrix Request Collapser 134
6.2.10 Hystrix线程传递及并发策略 137
6.2.11 Hystrix命令注解 142
6.3 本章小结 144
第7章 Spring Cloud Zuul基础篇 145
7.1 Spring Cloud Zuul概述 145
7.2 Spring Cloud Zuul入门案例 146
7.3 Spring Cloud Zuul典型配置 149
7.3.1 路由配置 149
7.3.2 功能配置 152
7.4 本章小结 154
第8章 Spring Cloud Zuul中级篇 155
8.1 Spring Cloud Zuul Filter链 155
8.1.1 工作原理 155
8.1.2 Zuul原生Filter 158
8.1.3 多级业务处理 160
8.1.4 使用Groovy编写Filter 165
8.2 Spring Cloud Zuul权限集成 168
8.2.1 应用权限概述 168
8.2.2 Zuul+OAuth2.0+JWT实战 169
8.3 Spring Cloud Zuul限流 176
8.3.1 限流算法 176
8.3.2 限流实战 177
8.4 Spring Cloud Zuul动态路由 179
8.4.1 动态路由概述 179
8.4.2 动态路由实现原理剖析 180
8.4.3 基于DB的动态路由实战 182
8.5 Spring Cloud Zuul灰度发布 185
8.5.1 灰度发布概述 185
8.5.2 灰度发布实战之一 186
8.6 Spring Cloud Zuul文件上传 189
8.6.1 文件上传实战 189
8.6.2 文件上传乱码解决 191
8.7 Spring Cloud Zuul实用小技巧 192
8.7.1 饥饿加载 192
8.7.2 请求体修改 192
8.7.3 使用okhttp替换HttpClient 193
8.7.4 重试机制 194
8.7.5 Header传递 195
8.7.6 整合Swagger2调试源服务 195
8.8 本章小结 197
第9章 Spring Cloud Zuul高级篇 198
9.1 Spring Cloud Zuul多层负载 198
9.1.1 痛点场景 198
9.1.2 解决方案 198
9.2 Spring Cloud Zuul应用优化 200
9.2.1 概述 200
9.2.2 容器优化 201
9.2.3 组件优化 202
9.2.4 JVM参数优化 203
9.2.5 内部优化 204
9.3 Spring Cloud Zuul原理&核心源码解析 205
9.3.1 工作原理与生命周期 205
9.3.2 Filter装载与Filter链实现 208
9.3.3 核心路由实现 210
9.4 本章小结 213
第10章 Spring Cloud基础综合案例 214
10.1 基础框架 214
10.1.1 搭建说明 214
10.1.2 技术方案 214
10.1.3 具体实现 215
10.2 实战扩展 217
10.2.1 公共包(对象,拦截器,工具类等) 218
10.2.2 用户上下文对象传递 218
10.2.3 Zuul的Fallback机制 221
10.3 生产环境各组件参考配置 222
10.3.1 Eureka推荐配置 222
10.3.2 Ribbon推荐配置 223
10.3.3 Hystrix推荐配置 223
10.3.4 Zuul推荐配置 223
10.4 本章小结 224
第11章 Spring Cloud Config上篇 225
11.1 Spring Cloud Config配置中心概述 225
11.1.1 什么是配置中心 225
11.1.2 Spring Cloud Config 227
11.1.3 Spring Cloud Config入门案例 228
11.2 刷新配置中心信息 234
11.2.1 手动刷新操作 234
11.2.2 结合Spring Cloud Bus热刷新 237
11.3 本章小结 244
第12章 Spring Cloud Config下篇 245
12.1 服务端Git配置详解与实战 245
12.1.1 Git多种配置详解概述 245
12.1.2 Git中URI占位符 245
12.1.3 模式匹配和多个存储库 250
12.1.4 路径搜索占位符 251
12.2 关系型数据库的配置中心的实现 251
12.2.1 Spring Cloud Config基于MySQL的配置概述 251
12.2.2 Spring Cloud Config与MySQL结合案例 252
12.3 非关系型数据库的配置中心的实现 255
12.3.1 Spring Cloud Config基于MongoDB的配置概述 255
12.3.2 Spring Cloud Config MongoDB案例 256
12.4 Spring Cloud Config使用技能 259
12.5 Spring Cloud Config功能扩展 260
12.5.1 客户端自动刷新 260
12.5.2 客户端回退功能 264
12.5.3 客户端的安全认证机制JWT 270
12.6 高可用部分 285
12.6.1 客户端高可用 285
12.6.2 服务端高可用 293
12.7 Spring Cloud与Apollo配置使用 300
12.7.1 Apollo简介 300
12.7.2 Apollo具备功能 300
12.7.3 Apollo总体架构模块 300
12.7.4 客户端设计 301
12.7.5 Apollo运行环境方式 302
12.8 Spring Cloud与Apollo结合使用实战 303
12.8.1 Apollo环境的要求 303
12.8.2 Apollo基础数据导入 303
12.8.3 创建config-client-apollo 307
12.8.4 创建gateway-zuul-apollo 310
12.9 本章总结 316
第13章 Spring Cloud Consul上篇 317
13.1 Consul简介 317
13.1.1 什么是Consul 317
13.1.2 Consul能做什么 317
13.1.3 Consul的安装 318
13.1.4 Consul启动 318
13.1.5 Consul UI 319
13.1.6 Consul实用接口 319
13.2 Spring Cloud Consul简介 319
13.2.1 Spring Cloud Consul是什么 319
13.2.2 Spring Cloud Consul能做什么 320
13.2.3 Spring Cloud Consul入门案例 320
13.3 本章小节 324
第14章 Spring Cloud Consul下篇 325
14.1 Spring Cloud Consul深入 325
14.1.1 Spring Cloud Consul的模块介绍 325
14.1.2 Spring Cloud Consul Discovery 325
14.1.3 Spring Cloud Consul Config 332
14.2 Spring Cloud Consul功能重写 335
14.2.1 重写ConsulDiscoveryClient 335
14.2.2 重写Consul ServerList 338
14.3 常见问题排查 343
14.3.1 版本兼容的那些坑 343
14.3.2 Spring Cloud Consul的一些问题 344
14.4 本章小节 346
第15章 Spring Cloud认证和鉴权 347
15.1 微服务安全与权限 347
15.2 Spring Cloud认证与鉴权方案 348
15.2.1 单体应用下的常用方案 348
15.2.2 微服务下SSO单点登录方案 348
15.2.3 分布式Session与网关结合方案 349
15.2.4 客户端Token与网关结合方案 349
15.2.5 浏览器Cookie与网关结合方案 350
15.2.6 网关与Token和服务间鉴权结合 350
15.3 Spring Cloud认证鉴权实战案例 351
15.3.1 创建Spring Cloud Gateway及关联信息 351
15.3.2 核心的公共工程core-service 353
15.3.3 服务提供方工程provider-service 355
15.3.4 客户端工程client-service 356
15.3.5 运行结果 356
15.4 本章小结 358
第16章 Spring Cloud全链路监控 359
16.1 全链路监控概述 359
16.1.1 链路监控的原理来源 359
16.1.2 Sleuth原理介绍 360
16.1.3 Brave和Zipkin 360
16.2 Sleuth基本用法 362
16.2.1 Sleuth对Feign的支持 365
16.2.2 Sleuth对RestTemplate的支持 366
16.2.3 Sleuth对多线程的支持 367
16.3 Sleuth深入用法 367
16.3.1 TraceFilter 367
16.3.2 Baggage 367
16.3.3 案例 367
16.4 Spring Cloud与SkyWalking 369
16.4.1 Skywalking概述 369
16.4.2 SkyWalking提供主要功能 370
16.4.3 SkyWalking主要特性 370
16.4.4 SkyWalking整体架构 370
16.5 Spring Cloud与Skywalking实战 370
16.5.1 父工程创建 371
16.5.2 创建eureka-server-skywalking工程 372
16.5.3 创建zuul-skywalking 373
16.5.4 创建service-a 375
16.5.5 创建service-b 377
16.5.6 SkyWalking Collector基础环境安装 378
16.5.7 使用Agent启动服务和监控查看 382
16.5.8 总结 385
16.6 Spring Cloud与Pinpoint 386
16.6.1 Pinpoint概述 386
16.6.2 Pinpoint架构模块 386
16.6.3 Pinpoint的数据结构 386
16.6.4 Pinpoint兼容性 387
16.7 Spring Cloud与Pinpoint实战 389
16.7.1 Pinpoint基础环境 389
16.7.2 Collector和Web部署 391
16.7.3 Agent启动应用 392
16.7.4 Ul浏览指标 394
16.7.5 总结 397
16.8 本章总结 398
第17章 Spring Cloud Gateway上篇 399
17.1 Spring Cloud Gateway概述 399
17.1.1 什么是Spring Cloud Gateway 399
17.1.2 Spring Cloud Gateway的核心概念 399
17.2 Spring Cloud Gateway的工作原理 400
17.3 Spring Cloud Gateway入门案例 401
17.4 Spring Cloud Gateway的路由断言 404
17.4.1 After路由断言工厂 404
17.4.2 Before路由断言工厂 406
17.4.3 Between路由断言工厂 406
17.4.4 Cookie路由断言工厂 407
17.4.5 Header路由断言工厂 408
17.4.6 Host路由断言工厂 410
17.4.7 Method路由断言工厂 411
17.4.8 Query路由断言工厂 411
17.4.9 RemoteAddr路由断言工厂 412
17.5 Spring Cloud Gateway的内置Filter 413
17.5.1 AddRequestHeader过滤器工厂 413
17.5.2 AddRequestParameter过滤器 413
17.5.3 RewritePath过滤器 414
17.5.4 AddResponseHeader过滤器 415
17.5.5 StripPrefix过滤器 416
17.5.6 Retry过滤器 417
17.5.7 Hystrix过滤器 418
17.6 本章小结 420
第18章 Spring Cloud Gateway下篇 421
18.1 Gateway基于服务发现的路由规则 421
18.1.1 Gateway的服务发现路由概述 421
18.1.2 服务发现的路由规则案例 422
18.2 Gateway Filter和Global Filter 425
18.2.1 Gateway Filter和Global Filter概述 425
18.2.2 自定义Gateway Filter案例 425
18.2.3 自定义Global Filter案例 427
18.3 Spring Cloud Gateway实战 428
18.3.1 Spring Cloud Gateway权重路由 428
18.3.2 Spring Cloud Gateway中Https的使用技巧 431
18.3.3 Spring Cloud Gateway集成Swagger 436
18.3.4 Spring Cloud Gateway限流 442
18.3.5 Spring Cloud Gateway的动态路由 450
18.4 Spring Cloud Gateway源码篇 458
18.4.1 Spring Cloud Gateway的处理流程 458
18.4.2 Gateway中ServerWebExchange构建分析 459
18.4.3 DispatcherHandler源码分析 460
18.4.4 RoutePredicateHandlerMapping源码分析 461
18.4.5 FilteringWebHandler源码分析 462
18.4.6 执行Filter源码分析 463
18.5 本章小结 465
第19章 Spring Cloud与gRPC上篇 466
19.1 Spring Cloud为什么需要gRPC 466
19.2 gRPC简介 468
19.3 gRPC的一些核心概念 469
19.3.1 服务定义 469
19.3.2 使用API 470
19.3.3 同步vs异步 470
19.4 RPC的生命周期 470
19.5 gRPC依赖于Protocol Buffers 472
19.5.1 Protocol Buffers的特点 472
19.5.2 使用Protocol Buffers的Maven插件 472
19.5.3 Proto Buffer语法介绍 475
19.6 gRPC基于HTTP2 476
19.7 gRPC基于Netty进行IO处理 477
19.8 gRPC案例实战 478
19.9 本章小结 481
第20章 gRPC在Spring Cloud与gRPC下篇 482
20.1 gRPC Spring Boot Starter介绍 482
20.2 gRPC Spring Boot Starter架构设计 482
20.3 gRPC Spring Boot Starter源码分析 483
20.3.1 gRPC Server Spring Boot Starter源码解析 483
20.3.2 gRPC Client Spring Boot Starter源码解析 486
20.4 案例实战 489
20.4.1 注册中心 489
20.4.2 链路追踪服务端 490
20.4.3 gRPC的lib工程 490
20.4.4 gRPC服务端 491
20.4.5 gRPC客户端 494
20.5 本章小结 497
第21章 Spring Cloud版本控制与灰度发布 498
21.1 背景 498
21.2 常见发布方式 499
21.2.1 蓝绿发布 499
21.2.2 滚动发布 500
21.2.3 灰度发布 500
21.2.4 对比 501
21.3 版本控制与灰度发布实战 502
21.3.1 Discovery项目 503
21.3.2 实战案例 504
21.3.3 实战测试 505
21.4 本章小结 509
第22章 Spring Cloud容器化 510
22.1 Java服务Docker化 510
22.1.1 基础镜像选择 510
22.1.2 Dockerfile编写 511
22.1.3 镜像构建插件 514
22.1.4 JDK8+的Docker支持 516
22.1.5 JDK9+镜像优化 517
22.2 Spring Cloud组件的Docker化 519
22.2.1 Docker化配置 519
22.2.2 config-server的Docker化 520
22.2.3 eureka-server的Docker化 522
22.2.4 gateway的Docker化 524
22.2.5 turbine的Docker化 526
22.2.6 Spring Admin的Docker化 528
22.2.7 biz-service的Docker化 530
22.2.8 网卡选择 532
22.2.9 小结 532
22.3 使用Kubernetes管理 532
22.3.1 概述 532
22.3.2 本地安装Kubernetes 533
22.3.3 部署到Kubernetes 536
22.3.4 一键伸缩 544
22.3.5 滚动升级 547
22.4 本章小结 552
第23章 Dubbo向Spring Cloud迁移 553
23.1 将Dubbo服务纳入Spring Cloud体系中 553
23.1.1 将 Dubbo项目改造成Spring Boot项目 553
23.1.2 集成Spring Cloud组件 554
23.1.3 将Dubbo服务暴露为RESTful API 555
23.2 将Spring Cloud服务Dubbo化 556
23.2.1 服务注册中心 556
23.2.2 服务提供者 556
23.2.3 服务消费者 558
23.2.4 Spring Cloud Dubbo框架原理 561
23.3 本章小结 562
第24章 Spring Cloud与分布式事务 563
24.1 概述 563
24.1.1 ACID 563
24.1.2 X/Open DTP模型与XA接口 564
24.1.3 CAP与BASE定理 567
24.2 解决方案 567
24.2.1 Java事务编程接口JTA 567
24.2.2 分布式事务TCC模式 568
24.2.3 分布式事务SAGA模式 570
24.3 实战 572
24.3.1 Atomikos JTA 572
24.3.2 TCC for REST 580
24.3.3 Servicecomb SAGA 594
24.4 本章小结 603
第25章 Spring Cloud与领域驱动实践 604
25.1 领域驱动概述 604
25.1.1 Spring Cloud与领域驱动 604
25.1.2 为什么需要领域建模 605
25.2 领域驱动核心概念 606
25.2.1 实体概述 606
25.2.2 值对象概述 606
25.2.3 领域服务 607
25.2.4 聚合及聚合根 607
25.2.5 边界上下文 608
25.2.6 工厂 609
25.2.7 仓储/资源库 609
25.2.8 CQRS架构 610
25.2.9 领域事件 610
25.2.10 领域驱动模型的设计步骤 611
25.3 Halo框架的设计 611
25.3.1 DDD应用框架的意义 611
25.3.2 领域驱动框架现状 612
25.3.3 Halo框架概述 612
25.3.4 Halo框架分层设计 613
25.3.5 Halo框架中的CQRS设计 615
25.3.6 Command与Command Bus设计 616
25.3.7 Event与Event Bus设计 619
25.3.8 Extend扩展点设计 621
25.3.9 业务身份设计 623
25.3.10 规范设计 624
25.4 Spring Cloud与Halo实战 625
25.4.1 事件风暴寻找模型和聚合 625
25.4.2 Spring Cloud与Halo实战案例 626
25.4.3 新建二方包工程模块 627
25.4.4 新建DDD基础设施层 629
25.4.5 新建DDD领域层 630
25.4.6 新建DDD应用层 632
25.4.7 启动测试 634
25.5 本章小结 634