第1篇 微服务开发基础——Spring Boot框架及使用 2
第1章 微服务架构开发 2
1.1 单体架构应用的困境 2
1.2 微服务架构 3
1.2.1 如何定义微服务架构 4
1.2.2 微服务架构的优点 5
1.2.3 微服务架构的缺点 6
1.3 微服务架构设计 7
1.3.1 微服务粒度 7
1.3.2 微服务拆分原则 8
1.3.3 微服务自治原则 9
1.3.4 微服务交互原则 10
1.3.5 微服务架构迁移 10
1.4 不应使用微服务架构的情形 11
第2章 微服务基础——Spring Boot 12
2.1 Spring与Spring Boot 12
2.2 快速启动Spring Boot 13
2.2.1 编写pom.xml文件 14
2.2.2 编写应用引导类 16
2.2.3 编写配置文件 17
2.2.4 运行项目 17
2.3 使用Spring Boot构建示例项目 19
2.3.1 经典三层应用架构 19
2.3.2 设计领域对象 20
2.3.3 实现数据管理 23
2.3.4 编写业务逻辑层 29
2.3.5 编写RESTful API 31
2.3.6 数据库初始化 35
2.3.7 启动测试 36
2.4 Spring Boot特性 37
2.4.1 Spring Boot自动配置机制 37
2.4.2 Spring Boot扩展属性配置 38
2.4.3 Spring Boot日志配置 39
2.5 关于敏捷开发 40
2.6 关于RESTful API设计 41
2.6.1 以资源为中心进行URL设计 42
2.6.2 正确使用HTTP方法及状态码 42
2.6.3 查询及分页处理原则 43
2.6.4 其他指导原则 43
第2篇 Spring Cloud组件实战 46
第3章 Spring Cloud简介 46
3.1 微服务架构的核心关键点 46
3.2 Spring Cloud技术概览 49
3.2.1 Spring Cloud子项目 50
3.2.2 为何选择Spring Cloud 53
3.3 Spring Cloud版Hello World示例 54
第4章 服务治理与负载均衡 58
4.1 什么是服务治理 58
4.2 构建服务治理——Eureka 59
4.2.1 搭建微服务Parent工程 60
4.2.2 搭建服务治理服务器——Eureka服务器 62
4.2.3 搭建服务提供者——注册服务 64
4.2.4 搭建服务消费者——获取服务 68
4.3 使用客户端负载均衡——Ribbon 72
4.3.1 什么是客户端负载均衡 72
4.3.2 启用Ribbon 74
4.3.3 负载均衡测试 75
4.4 使用Feign简化微服务调用 77
4.5 深入Eureka 80
4.5.1 服务注册及相关原理 80
4.5.2 Eureka自我保护模式 82
4.5.3 注册一个服务实例需要的时间 84
4.5.4 Eureka高可用集群及示例 84
4.5.5 多网卡及IP指定 88
4.5.6 Eureka服务访问安全 89
4.6 深入Ribbon 90
4.6.1 Ribbon客户端负载均衡原理 90
4.6.2 Ribbon负载均衡策略及配置 92
4.6.3 直接使用Ribbon API 94
4.7 深入Feign 96
4.7.1 Feign的参数绑定 96
4.7.2 Feign中的继承 97
4.7.3 Feign与Swagger的冲突 98
4.8 微服务健康监控 99
4.9 异构服务解决方案——Sidecar 101
第5章 微服务容错保护——Hystrix 102
5.1 什么是微服务容错保护 102
5.2 快速启动Hystrix 103
5.2.1 引入Hystrix依赖 104
5.2.2 开启Hystrix支持 104
5.2.3 修改UserService实现 104
5.2.4 容错测试 105
5.2.5 服务降级的两种实现方式 107
5.2.6 在Feign中使用Hystrix回退 109
5.3 Hystrix容错机制分析 110
5.3.1 Hystrix整体处理流程 111
5.3.2 HystrixCommand与HystrixObservableCommand 113
5.3.3 断路器原理分析 115
5.3.4 Hystrix异常——HystrixBadRequestException 117
5.4 服务隔离 117
5.4.1 线程池隔离与信号量隔离 118
5.4.2 服务隔离的颗粒度 119
5.4.3 服务隔离配置 119
5.4.4 小结 120
5.5 服务降级模式 121
5.5.1 快速失败 121
5.5.2 静默失败 121
5.5.3 返回默认值 122
5.5.4 返回组装的值 122
5.5.5 返回远程缓存 123
5.5.6 主/从降级模式 124
5.6 请求缓存 127
5.7 请求合并 128
5.8 Hystrix监控 130
5.8.1 Hystrix仪表盘 131
5.8.2 Turbine仪表盘集群监控 133
5.8.3 Turbine与消息服务器集成 136
第6章 API服务网关——Zuul 137
6.1 API服务网关 138
6.2 Spnng Cloud与Netflix Zuul 139
6.3 启用Zuul路由服务 140
6.3.1 构建Zuul路由服务器 141
6.3.2 路由测试 142
6.3.3 负载均衡测试 144
6.3.4 Hystrix容错与监控测试 146
6.4 路由配置规则 146
6.4.1 服务路由默认规则 147
6.4.2 自定义微服务访问路径 148
6.4.3 忽略指定微服务 149
6.4.4 设置路由前缀 149
6.4.5 通过静态URL路径配置路由映射 150
6.4.6 路由配置顺序 151
6.4.7 自定义路由规则 151
6.5 Zuul路由其他设置 151
6.5.1 Header设置 152
6.5.2 HttpClient配置 153
6.5.3 路由配置的动态加载 153
6.6 Zuul容错与回退 153
6.6.1 实现Zuul的回退 154
6.6.2 服务超时 156
6.7 Zuul过滤器 157
6.7.1 过滤器特性 158
6.7.2 过滤器类型及生命周期 159
6.7.3 自定义Zuul过滤器 160
6.7.4 禁用Zuul过滤器 161
6.7.5 关于 Error过滤器的一点补充 162
6.8 @EnableZuulServer与@EnableZuulProxy比较 164
6.8.1 EnableZuulServer注解的过滤器 164
6.8.2 EnableZuulProxy注解的过滤器 165
第7章 统一配置中心——Config 166
7.1 Spring Cloud Config简介 166
7.2 快速启动 168
7.2.1 构建配置服务器 168
7.2.2 创建应用配置文件 169
7.2.3 升级微服务配置 172
7.2.4 启动测试 173
7.2.5 @Value注解 174
7.2.6 关于配置服务的默认配置 174
7.2.7 Spring配置加载顺序 175
7.3 配置资源库 176
7.3.1 配置资源规则详解 176
7.3.2 集成Git仓库 177
7.3.3 搜索目录 179
7.3.4 本地缓存 179
7.3.5 Git访问配置 180
7.3.6 集成SVN 180
7.3.7 使用文件系统 181
7.4 配置的加密与解密 181
7.4.1 安装JCE (Java Cryptography Extension) 181
7.4.2 使用对称加密 182
7.4.3 加密/解密端点 183
7.4.4 客户端解密 185
7.4.5 非对称加密 187
7.5 配置服务器访问安全 187
7.6 配置服务器的高可用 188
7.6.1 整合Eureka 188
7.6.2 快速失败与响应 189
7.6.3 动态刷新配置 191
第8章 分布式服务跟踪——Sleuth 192
8.1 Spring Cloud Sleuth简介 192
8.1.1 快速启用Sleuth 193
8.1.2 Sleuth与日志框架 196
8.1.3 有关Span 199
8.2 Sleuth与ELK整合 202
8.2.1 将日志输出到Logstash 202
8.2.2 Logstash与Log4j的集成 205
8.3 整合Zipkin服务 206
8.3.1 构建Zipkin服务器 206
8.3.2 整合微服务 208
8.3.3 Zipkin分析 208
8.3.4 输出Traceld 211
8.4 Sleuth抽样采集与采样率 213
第9章 消息驱动——Stream 215
9.1 什么是消息驱动开发 215
9.1.1 基于消息中间件开发的优点 216
9.1.2 基于消息中间件开发的缺点 217
9.2 Spring Cloud Stream简介 218
9.2.1 应用模型 218
9.2.2 编程模型 220
9.2.3 使用“发布-订阅”模式 223
9.3 Kafka使用指南 224
9.3.1 Kafka基础知识 224
9.3.2 搭建Kafka环境 226
9.4 使用消息对应用重构 228
9.4.1 为商品服务增加缓存功能 229
9.4.2 为用户微服务添加消息发送功能 235
9.4.3 为商品微服务添加消息监听功能 239
9.4.4 测试 242
9.4.5 自定义消息通道 245
9.5 Spring Cloud Stream高级主题 246
9.5.1 单元测试 246
9.5.2 错误处理 247
9.5.3 消息处理分发 248
9.5.4 消费者组与消息分区 249
9.5.5 消息绑定器 250
9.6 消息总线——Spring Cloud Bus 252
9.6.1 完成配置自动刷新配置 252
9.6.2 发布自定义事件 256
第10章 微服务应用安全——Security 258
10.1 Spring Boot的应用安全 258
10.1.1 实现用户认证 258
10.1.2 实现用户鉴权 261
10.2 微服务安全 263
10.3 基于OAuth 2.0的认证 265
10.3.1 OAuth 2.0授权流程 265
10.3.2 客户端授权模式 266
10.3.3 使用OAuth 2.0完成用户认证及授权 268
10.3.4 整合API网关服务 274
10.4 基于JWT的认证 275
10.4.1 改造认证服务支持输出JWT 276
10.4.2 在Zuul中对JWT进行解析 281
10.4.3 改造商品微服务 282
第3篇 微服务与Docker容器技术 288
第11章 微服务与Docker 288
11.1 Docker简介 288
11.2 Docker的使用 289
11.2.1 安装 290
11.2.2 镜像 293
11.2.3 容器 298
11.2.4 容器实战:MySQL 299
11.3 Docker与Spring Cloud微服务 301
11.3.1 部署Eureka服务 302
11.3.2 部署应用微服务 304
11.4 微服务与Jenkins 305
11.4.1 安装Jenkins 306
11.4.2 Jenkins配置 307
11.4.3 构建任务 309
11.5 微服务编排 315