Spring Cloud微服务全栈技术与案例解析
下载地址: https://pan.baidu.com/s/1NJmgFlQmNmFG2RkrYO7Q7Q
扫码下面二维码关注公众号回复100017 获取分享码
本书目录结构如下:
Spring Cloud与微服务概述… ··2
1.1 传统的单体应用………………… ··2
1.1.1 改进 应用的架构…………
1.1.2 务靠拢 ……………… ·3
1.2 什么是微服务…………………… ·4
1.2.l 用微 务架构的优势和
劣势 ……..... ...... .. ... ... 4
1.2.2 重构前的准备工作……………
1.3 什么是 Spring Cloud ……………… 5
1.3.l Spring oud 块介绍……… ·5
1.3.2 Spring Cloud 版本 ……… ·6
1.4
本章小结…. ...... ..……… ·······7
章实战前的准备工作…………
2.1 开发环境的准备………………… 8
2.2 Spring Boot 人门 …… …………… ··9
2.2. l Spring Boot 简介 ……………"
2.2.2
搭建 Spring Boot 项目……… ··9
2.2.3 编写第一个阻ST 口……·· 11
2.4 读取配置文件 ………………· 11
2.2.5 profiles 境配置 ………… 13
2.2.6 热部署 …………………….. 13
2.2.7 actuator 监控 ………………. 15
2.2.8 统一异常 ……………… 16
2.2.9 步执行…………………… 18
2.2.10 口………… …… ·21
2.3 本章小结…………………………
第二部分基础篇
Eureka注册中心……………·26
3.1 Eureka ……………………………·26
3.2 使用 Eureka 编写注册中心服务… 27
3.3
编写服务提供者…………... ....… 29
3.3.l 建项目注册到 Eureka ……··29
3.3.2 编写提 口……………… 30
3.4 者…… .... ..……… ·31
3.4. l 直接调用接口……………... 31
仅供非 业用途或 习使用仅供非商业用途或交流学习使用
3.4.2 通过 Eureka 来消费接口 …… 32
3.5 开启 Eureka 认证………………… 33
3.6 Eureka 高可用搭建…………… ·33
3.6.1 高可用原理………………… 33
3.6.2 搭建步骤………………… ··34
3.7 常用配置讲解……. .. ...………… 35
3.7.1 关闭自我保护…… ………… 35
3.7.2 自定义 Eureka Instance ID … 35
3.7.3 自定义实例跳转链接… ·36
3.7.4 快速移除已经失效的服务
信息……....................... 37
3.8 扩展使用……………………… 38
3.8.1 Eureka REST API …………… 38
3.8.2 元数据使用……………… ·40
3.8.3 EurekaClient 使用………….. 41
3.8.4 健康检查…… …………… 43
3.8.5 服务上下线监控………… ··45
3.9 本章小结…·…….......………… ·46
章客户端负载均衡阳bbon …… ··47
4.1 Ribbon …………………………… 47
4.1.l Ribbon 模块………………… 47
4.1.2 Ribbon 使用………………… 48
4.2 RestTemplate 结合 Ribbon 使用… 49
4.2.l 使用 RestTemplate 与整合
Ribbon …·....................… 49
4.2.2 RestTemplate 负载均衡示例… 52
4.2.3 @LoadBalanced 注解原理….. 53
4.2.4 Ribbon API 用… ………… ·57
4.2.5 Ribbon 饿加载…… ……… 58
4.3
负载均衡策略介绍….............. 59
VII
4.4 自定义负载策略······ ·······…… 60
4.5 配置详解……………………….. 61
4.5.1 常用配置……………………“
4.5.2 代码配置 Ribbon …………… 62
4.6 重试机制………………………. 63
4.7 本章小结………………·……. ·64
章声明式REST客户端Feign··· ·· 65
5.1 使用 Feign 调用服务接口……… ·65
5.1.1 Spring Cloud 集成 Feign··· 66
5.1.2 使用 Feign 调用接口……… 66
5.2 自定义 Feign 的配置……………. 67
5.2.1 日志配置…………………… 67
5.2.2 契约配置… ……………….. 69
5.2.3 Basic 认证配 …………….. 69
5.2.4 超时时间配 ……………… 70
5.2.5 客户端组件配置 …………… ·71
5.2.6 GZIP 压缩配置 …………… ·72
5.2.7 编码器解码器配置… ……· ·72
5.3 脱离 Spring Cloud 使用 Feign ….. 73
5.3.1 原生注解方式 ……………… 73
5.3.2 构建 Feign …………… 74
5.3.3 其他配置…………………… 75
5.4
本章小结………............... ··76
Hystrix 服务容错处理……... 77
6.1 Hystrix …………………………… 77
6.1.1 Hystrix 简单使用 ………… 77
6.1.2 回退支持 ……………
··78
6.1.3 信号量策略配置………… 79
6.1.4 线程隔离策略配置 ………… 79
仅供非商 用途或交流学习使用仅供非商 用途或交流学习使用
VIII
6.1.5 结果缓存 …………………… 80
6.1.6 缓存清除 ……………… 81
6.1.7 合并请求 ………………… 83
6.2 Spring Clo 中使用 Hystrix ·84
6.2.1 简单使用 ……………… 84
6.2.2 配置详解 …………………… 85
6.2.3 Feign 整合 Hystrix 务容错 88
6.2.4 Feign 禁用 Hystrix ……… ··90
6.3 Hystrix 监控………·…………….. 91
6.4 整合 Dashboard 查看监控数据… 92
6.5 Turbine 聚合集群数据…………… 94
6.5. l Turbine ………… ··94
6.5.2 context-path 导致监控失败 ….. 95
6.6 本章小结……… …………… 95
API网关··
7.l Zuul 简介……………………… 96
7.2 使用 Zuul 构建微服务网关…….. 97
7.2.l 简单使用…… ………… 97
7.2.2 Eureka ……………… ··98
7.3 Zuul 路由配 ………………… 98
7.4 Zuul 过滤器讲解………………·”
7.4.l 谑器类型 ……………… 100
7.4.2 请求生命周期 ……… 100
7.4.3 使用过滤器… …………… 101
7.4.4 掘器禁用 ……… 103
7.4.5 过谑器中传递数据 …… 103
7.4.6 过滤器拦截请求 ………· 104
7.4.7 过洁器中异常处理 ………… 106
7.5 Zuul 容错和回退 …......……·· 108
7.5.1 容错机制………………… 108
7.5.2 回退机制 ………………. · 109
7.6 Zuul 高可用… …·
………….. 111
7.7
章小结 .... .. ……......…… · 111
第三部分实
章分布式配置管理……· .. 114
8.1 自研配置管理框架 Smconf
简介 ………………………….. 114
8.2 Smconf 作原理… ………… 115
8.3 Smconf 部署……………………. 116
8.3.1 Mongodb 安装 …………….. 116
8.3.2 Zookeeper 安装 ………….. 117
8.3.3 Smconf Server 部署 ……… ·· 118
8.4 项目中集成 Smconf·· ………….. 119
8.4.l 集成 Smconf ………… …. 119
8.4.2 使用 Smconf ……………… 120
8.4.3 置更新回调……………. 121
8.5 Smconf 详细使用………… .. 122
8.5.1 源码编译问题………… ·122
8.5.2 后台账号管理 ……… 122
8.5 3 REST API …………………·123
8.6 Smconf 源码解析……………… 125
8.6.l li ent 启动……………… 125
8.6.2 启动加载配置 ……………·· 127
8.6.3 配置修改推送原理 ………... 128
8.7
小结……………... .. ...... .. 129
Sleuth服务眼踪………·
130
9. I Spring oud 集成 Sleuth ………· 130
9.2 整合 Logstash ………………… 131
9.2.l ELK 简介……………… 131 仅供非商业用途或交流学习使用
输出 JSON 格式日志 ……... 131
9.3 整合 Zipkin …………………… 133
9.3.1 Zipkin 数据收集服务 133
9.3.2 项目集成 Zipkin 发送调用链
数据 ………………………. 134
9.3.3
抽样采集数据 …………… 135
9.3.4 RabbitMq 代替 发送
调用链数据 ……………
135
9.3.5 Elasticsearch 存储调用链
数据
……………·· 136
9.4 本章小结……………………….. 137
10章微服务之间调用的安全
认证
…….. 138
10.1 什么是用 …… …………· .. 138
10.2 创建统 的认证服 …… …. 139
10.2.1 表结构… ………………. 139
10.2.2 JWT 工具类封装 ………. 139
10.2.3
认证接口
……………·141
10.3 服务提供方进行调用认证…· 142
10.4 服务消费方申 Token ……… 143
10.5 Feign 调用前统一申请 Token
传递到调用的服务中 …… 145
10.6 Zuul 中传递 Token 到路由的
服务中……………………… 147
10.7 本章小结………………. . . 148
11
Spring Boot Adrnin….. 149
11.1 Spring Boot Adm in 使用
方法…………………………· 149
11.1.1
Spring Boot Admin
项目 ……………………· 149
IX
11.1.2 将服务注册到 Spring Boot
Admrn· ………………·150
11.1.3 如何在 Admin 查看各个
服务的日志 …………….. 151
11.2 开启认证…… ……………….. 152
11.3 集成 Eureka …………………… 153
11.4
集成 Turbine ………… ……. 154
11.5 监控服务… …··…
……. 155
11.5.1 邮件警报 …………… .. 156
11.5.2 自定义钉钉警报………… 156
11.6 本章小结………………… 159
12章服务的API文档管理….. 160
12.1 Swagger 介………………. 160
12.2 集成 Swagger 管理 API
文档……· …………………… 161
12.2.1 封装 Swagger Starter ……. 161
12.2.2 在项目 集成 Swagger
starter …………………… 162
12.2.3
使用 Swagger 生成文档 ... 162
12.2.4 在线测试接口 …………. 163
12.3 Swagger 注解 …………………. 164
12.4 Eureka 控制台快速查看 Swagger
文档 ……………………… 169
12.5 本章 结… …………………… 169
第四部分高级篇
13
API网关扩展……………….. 172
13.1 用户认证…x
13.Ll 动态管理不需要拦截的 API
求…………………·· 172
13.1.2 创建认证的用户服 …… 174
13.1.3 路由之前的认证………·· 175
13.1.4 向下游微服务中传递认证
之后的用户信息………… 176
13.1.5 部服务间的用户信息
传递………… ………· 177
13.2 服务限流……………………·· 179
13.2.1 限流算法………………·· 179
13.2.2 单节点限流 ………… 179
13.2.3 集群限流 ………………·· 184
13.2.4 具体服务限流………… 187
13.2.5 具体接口限流………….. 188
13.3 服务降级……………………… 194
13.4 灰度发布…………………… 196
13.4.1 原理讲解… ………·· 196
13.4.2 根据用户做灰度发布…… 197
13.4.3 根据 IP 做灰度发布…… ··200
13.5 本章小结………… ... .. .. …… 200
14章微服务之缓存…………… 201
14.l Guava Cache 本地缓存……… 201
14.Ll Guava Cache 简介……… 201
14.1.2 代码示例……………… ·· 202
14.1.3 回收策略……………… ··202
14.2
Redis 缓存….. .. ...... .. ...... ... 203
14.2.1 Redistemplate 操作
Redis …·………………·203
14.2.2 Repository 操作 Redis …204
14.2.3 Spring Cache 缓存数据 ··206
14.2.4 Spring Cache 支持对
每个缓存的时间配 ·…… 211
14.2.5 缓存异常处理… ……… ·212
14.2.6 自定义缓存工具类……… 214
14.3 防止缓存穿透方案.... ...…….. 216
14.3.1 么是缓存穿透 ………… 216
14.3.2 缓存穿透的危害… ……… 216
14.3.3 解决方案 ………………-- 217
14.3.4 滤器 ………… 217
14.3.5 代码示例……………… 217
14.4 防止缓存 崩方案…………… 219
14.4.1 什么是缓存雪崩 ………… 219
14.4.2 缓存雪崩的危害 ………… 219
14.4.3 解决方 …… ……….. 219
14.4.4 代码示例 ………… …-- 219
14.4.5 分布式锁方式………… ··220
14.5 本章小结…… ……………… 221
15章微服务之存储…………… ·222
15.l 存储选型……......………… 222
15 .2 Mongodb ……………………… 223
15.2.1 集成 Spring Data Mongodb …223
15.2.2 添加数据操作………… ··223
15.2.3 索引使用……………… ··225
15.2.4 修改数据操作 ………… ··227
15.2.5 删除数据操作…… …… 228
15.2 查询数据操作 ………… ··229
15.2.7 GridFS 操作 …………….. 231
15.2.8 Repository 方式操作
数据 …………………-- 232
15.2.9 自增 ID 实现 …………… ·23615.2.10 量更新扩展 ………… ·239
15.3 Mysql ………………………… 243
15.3.1 pring JdbcTemplate … 243
15.3.2 JdbcTemplate 代码 例… ·243
15.3.3 JdbcTemplate 操作
Mysql ··. ....... 244
15.3.4
JdbcTemplate 使用
……. .. ... .....
·244
15.3.5 常见 ……………… ·248
15 .4 Elasticsearch …………………… 251
15.4. l Sprin Data
Elasticsearch ·………… 251
15.4.2 Repository 例……… ... 251
15.4.3 ElasticsearchTemplate
示例 ……··.......... …… 254
15.4.4 引构建方式 ………… 257
15.5 本章小结…………………….. 259
16章微服务之分布式事物解决
方案…··........…….. 260
16.1 两阶段型…………………… 260
16.2 TCC 补偿型........…………… ·261
16.3 最终一致性…… …… ··…… …. 261
16.3.1 讲解……………… .. 261
16.3.2 靠性消息服务 …… 263
16.3.3 息存 表设计 ……… ··264
16.3.4 务接口 ……… ··265
16.3.5 建消息发送系统 ……… 269
16.3.6 消费消息逻辑 ………… ·273
16.3.7 消息管理系统 ………… ··275
16.4 最大努力通知型 物………… 276
XI
16.4.1 …………………… 276
16.4.2 原理 …………………… 276
16.5 小结…………………...... 276
17章分布式任务调度….. ....…… 277
17 .1 Elastic-Job ……………………··277
17. l.l Elastic-Job 介绍 ………… 277
17.1.2 任务调度目前存在的
问题 ……· …………… 277
17.1.3 什么选 Elastic-Job …··278
17.2 快速集成……………………… 279
17.3 使用…………………….. 280
17.3.1 简单 ……………… ··280
17.3.2 数据流任务 ………….. 281
17.3.3 脚本任务 ……………… 282
17.4 置参数讲解………………… 282
17.4. l 注册中心配置 ………… .. 283
17.4.2 作业配 ……………….. 283
17.4.3 data负ow ……… ·284
17.4.4 script 独有配置 ………… ·284
17.5
节点并行调度 ... .. .. .......… 285
17.5.1 分片概念 ……………….. 285
17.5.2 任务 分片策略 ……… 285
17.5.3 务数据分片处 …….. 286
17.6 件追踪……………………… 289
17.7 功能………………·…… ··290
17.7.1 自定义监 ………… 290
17.7.2 异常处理 ………… 291
17.8 维平台………… ······ 291
17.8.1 功能列表 …… ………… 292
17.8 .2 部署运维平台 ………… 292XII
17.8.3 运维平台使用 ……….. 293
17.9 使用经验分享 ….. .. ..…… ·29
17.9.1 任务的划分和监控 ……… 296
17.9.2 任务的扩展性和节点
数量… …………··…… ·297
17.9.3 任务的重复执行 ………·297
17.9.4 overwrite 覆盖问题 ……… 298
17.9.5 流水式任务 …………… ·2 98
17.10 本章小结 ……· ·………… 299
18章分库分表解决方案…
… · 300
18.1 Sharding-JDBC ……
E
…………·300
18.1.1 介绍 ……··
…… . 300
18.1.2 功能列表…… …... 301
18.1.3 相关概念 ……………….. 301
18.2 快速 成……………… ……… 302
18.3 读写分离实战…………… ...... 304
18.3.1 准备数据………………. 304
18.3.2 配置读写分离 ………… ··304
18.3.3 读从库 ……………. 305
8.3.4 写主库 …………… 307
18.3 .5
Hint 强制路由主库 …. .. ... 308
18.4
分库分表实战………. ....…… ·309
18.4.1 常用分片算法 …………. 310
18.4.2 使用分片算法 ………….. 310
18.4.3 不分库只分表实战……… 311
18.4.4 既分库又分表实战 …·… 314
18.5 分布式主键………… ….. .. .… 317
18.6 本章小结 ………. ... ..……….. 319