本书共分10章,主要介绍Spring Cloud各个核心组件的设计原理,以及目前流行的Spring Cloud Alibaba和 Netflix组件,并且剖析Spring Cloud对流处理、批处理,以及目前业界流行的Serverless的支持。在介绍各部分内容时,本书将理论与实践相结合,对每个核心知识点给出了具体的案例应用,以帮助读者掌握核心组件的设计理念。
方剑,花名洛夜,Spring Cloud Alibaba 开源项目负责人/创始人之一。Apache RocketMQ Committer,Alibaba Nacos Committer。目前就职于阿里巴巴集团。曾在个人博客上编写过《Spring MVC源码分析系列》、《Spring Boot源码分析系列》文章。目前,关注微服务、云原生、Kubernetes。
第1章 Spring Cloud生态	1
1.1 Spring Cloud 基础:Spring Boot概述	1
1.2 Spring Boot核心特性	3
1.2.1 Web服务器:WebServer	3
1.2.2 条件注解:@ConditionalOnXX	7
1.2.3 工厂加载机制	10
1.2.4 配置加载机制	12
1.2.5 Spring Boot Actuator	15
1.3 Spring Cloud 概述	17
1.3.1 Spring Cloud诞生背景	17
1.3.2 Netflix OSS	19
1.3.3 Spring Cloud项目	20
1.3.4 Spring Cloud 版本	21
1.3.5 Spring Cloud 最新动态	23
第2章 服务注册与服务发现	26
2.1 微服务架构演进	26
2.2 使用Alibaba Nacos体验第一个Spring Cloud微服务应用	29
2.2.1 下载并启动Nacos Server	30
2.2.2 启动 Nacos Discovery Provider 进行服务注册	32
2.2.3 启动 Nacos Discovery Consumer 进行服务发现	33
2.3 使用Netflix Eureka替换Alibaba Nacos注册中心	36
2.3.1 启动Eureka Server	37
2.3.2 启动 Eureka Discovery Provider 进行服务注册	38
2.3.3 启动 Nacos Discovery Consumer 进行服务发现	39
2.4 Spring Cloud 统一服务注册/发现编程模型	40
2.4.1 DiscoveryClient和ReactiveDiscoveryClient	40
2.4.2 ServiceInstance和Registration	44
2.4.3 ServiceRegistry	48
2.4.4 ServiceRegistryEndpoint	50
2.5 双注册双订阅模式	51
2.5.1 双注册双订阅模式分析	51
2.5.2 案例:使用双注册双订阅模式迁移Eureka注册中心到Nacos注册中心	54
第3章 负载均衡与服务调用	57
3.1 负载均衡原理	57
3.2 Spring Cloud LoadBalancer负载均衡组件	59
3.3 Netflix Ribbon负载均衡	74
3.3.1 RibbonLoadBalancerClient	74
3.3.2 RibbonServer和Server	79
3.3.3 ServerIntrospector	82
3.3.4 ILoadBalancer	84
3.3.5 ServerList	87
3.3.6 ServerListUpdater	90
3.3.7 ServerStats	92
3.3.8 Netflix Ribbon配置项总结	94
3.3.9 Ribbon缓存时间	97
3.4 Dubbo LoadBalance 负载均衡	98
3.5 OpenFeign:声明式Rest客户端	100
3.5.1 OpenFeign概述	100
3.5.2 OpenFeign 对 JAX-RS 的支持	102
3.5.3 OpenFeign 底层执行原理	103
3.6 Dubbo Spring Cloud :服务调用的新选择	105
3.7 再谈路由和负载均衡	111
3.8 案例:应用流量控制	112
3.8.1 流量控制可以解决的业务场景	113
3.8.2 使用 Netflix Ribbon 完成应用灰度发布	115
第4章 配置管理	119
4.1 配置中心背景概述	119
4.2 Spring/Spring Boot 与配置	120
4.3 Spring Cloud与配置	122
4.3.1 使用Alibaba Nacos体验配置的获取以及动态刷新	123
4.3.2 从Spring Cloud 配置中心获取配置原理	125
4.3.3 Spring Cloud配置动态刷新	135
4.4 Spring Cloud Config Server/Client	151
4.4.1 Spring Cloud Config Server	151
4.4.2 Spring Cloud Config Client	165
4.4.3 Spring Cloud Config Client 与 Service Discovery 整合	171
4.4.4 Spring Cloud Config 配置动态更新	174
4.5 再谈配置动态刷新	175
4.6 案例:Spring Cloud应用流量控制策略动态生效	179
第5章 熔断器	184
5.1 熔断器模式概述	184
5.2 手动实现一个断路器	186
5.2.1 定义 State 枚举和 Counter 计数器类	186
5.2.2 定义 CircuitBreaker 类	188
5.2.3 使用 CircuitBreaker 进行场景测试	191
5.3 Spring Cloud Circuit Breaker 技术演进	193
5.4 Alibaba Sentinel	199
5.4.1 Sentinel的核心概述	199
5.4.2 Spring Cloud Alibaba Sentinel	204
5.4.3 Sentinel 与 OpenFeign和RestTemplate	207
5.4.4 Sentinel限流与Dashboard	211
5.4.5 Sentinel 高级特性	215
5.5 Netflix Hystrix	219
5.5.1 Hystrix核心概述	219
5.5.2 Spring Cloud Netflix Hystrix	225
5.5.3 Hystrix限流与Dashboard	227
5.5.4 Hystrix 高级特性	231
5.6 Resilience4j	235
5.6.1 Resilience4j 体验	236
5.6.2 Spring Cloud Resilience4j	241
5.6.3 Resilience4j 高级特性	244
5.7 案例:使用 Sentinel 保护应用,防止服务雪崩	248
第6章 Spring生态消息驱动	253
6.1 消息中间件概述	254
6.2 Spring与消息	257
6.2.1 消息编程模型的统一	257
6.2.2 消息发送和订阅	258
6.2.3 WebSocket	265
6.2.4 案例:使用spring-messaging处理WebSocket	268
6.3 Spring Integration	271
6.3.1 Spring Integration 核心组件概述	272
6.3.2 Spring Integration核心组件使用	275
6.4 Spring Cloud Stream	277
6.4.1 使用Spring Cloud Stream发送和接收消息	277
6.4.2 理解 Binder 和 Binding	280
6.4.3 深入理解Spring Cloud Stream	282
6.4.4 高级特性	284
第7章 消息总线	295
7.1 消息总线概述	295
7.2 深入理解Spring Cloud Bus	296
7.2.1 Spring Cloud Bus的使用	297
7.2.2 Spring Cloud Bus的原理	300
7.2.3 Spring Cloud Bus 事件	302
7.2.4 Spring Cloud Bus 源码分析	305
7.3 案例:使用Spring Cloud Bus完成多节点配置动态刷新	309
第8章 Spring Cloud Data Flow	311
8.1 批处理/流处理概述	312
8.2 流处理案例:信用卡反欺诈系统	315
8.3 批处理案例:统计GitHub仓库的各项指标数据	323
8.4 Spring Cloud Data Flow批处理任务组合	331
8.5 Spring Cloud Data Flow Shell	335
8.6 Spring Cloud Skipper	337
8.7 Spring Cloud Deployer	341
8.7.1 TaskLauncher 接口	342
8.7.2 AppDeployer 接口	344
8.7.3 LocalAppDeployer	348
8.8 Spring Cloud Task	349
8.8.1 体验Spring Cloud Task	349
8.8.2 深入理解Spring Cloud Task	351
8.8.3 Spring Cloud Task Batch	354
8.9 Spring Batch	358
8.9.1 Spring Batch 核心组件	358
8.9.2 案例:使用 Spring Batch 完成便利店每日账单统计	361
第9章 网关	366
9.1 API网关概述	366
9.2 Netflix Zuul	368
9.3 非阻塞式的Spring Cloud Gateway	371
9.4 Route路由信息	376
9.5 Predicate机制	377
9.5.1 PredicateDefinition和AsyncPredicate	377
9.5.2 RoutePredicateFactory	378
9.5.3 内置RoutePredicateFactory	381
9.6 Filter机制	382
9.6.1 FilterDefinition和GatewayFilter	382
9.6.2 GlobalFilter	386
9.6.3 内置 GatewayFilterFactory	387
9.6.4 网关内置的GlobalFilter	390
9.7 整合注册中心和配置中心	391
9.8 GatewayControllerEndpoint	397
9.9 案例:使用Spring Cloud Gateway进行路由转发	398
第10章 Spring Cloud与Serverless	401
10.1 Serverless	401
10.2 Java Function	403
10.3 Spring Cloud Function	405
10.4 Spring Cloud Function与Spring生态的整合	411
10.4.1 Spring Cloud Function与Spring Web/WebFlux	412
10.4.2 Spring Cloud Function 与 Spring Cloud Stream	420
10.4.3 Spring Cloud Function 与 Spring Cloud Task	427
10.5 案例:使用GCP Cloud Functions体验Spring Cloud Function	430