Spring Cloud微服务全栈技术与案例解析
下载地址: pan.baidu.com/s/1NJmgFlQm…
扫码下面二维码关注公众号回复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