第1章 Spring Cloud概述\t1
1.1 传统的应用\t2
1.1.1 单体应用\t2
1.1.2 架构演进\t3
1.1.3 架构要求\t4
1.2 微服务与Spring Cloud\t5
1.2.1 什么是微服务\t5
1.2.2 关于Netflix OSS\t6
1.2.3 Spring Cloud与Netflix\t6
1.2.4 Spring Cloud的主要模块\t6
1.3 学习方面的准备工作\t7
1.3.1 下载本书的软件及源码\t7
1.3.2 导入本书的案例\t7
1.4 本章小结\t8
第2章 搭建开发环境\t9
2.1 安装与配置Maven\t10
2.1.1 关于Maven\t10
2.1.2 下载与安装Maven\t11
2.1.3 配置远程仓库\t11
2.2 安装Eclipse\t12
2.2.1 Eclipse版本\t12
2.2.2 在Eclipse中配置Maven\t12
2.3 Spring Boot\t13
2.3.1 Spring Boot简介\t13
2.3.2 新建Maven项目\t14
2.3.3 编写启动类\t15
2.3.4 编写控制器\t16
2.3.5 发布REST WebService\t17
2.4 Spring Boot配置文件\t18
2.4.1 默认配置文件\t18
2.4.2 指定配置文件位置\t19
2.4.3 yml文件\t19
2.4.4 运行时指定profiles配置\t20
2.4.5 热部署\t20
2.5 Spring Cloud的版本\t21
2.6 本章小结\t21
第3章 微服务发布与调用\t22
3.1 Eureka介绍\t23
3.1.1 关于Eureka\t23
3.1.2 Eureka架构\t23
3.1.3 服务器端\t24
3.1.4 服务提供者\t24
3.1.5 服务调用者\t24
3.2 第一个Eureka应用\t24
3.2.1 构建服务器\t24
3.2.2 服务器注册开关\t27
3.2.3 编写服务提供者\t27
3.2.4 编写服务调用者\t29
3.2.5 程序结构\t32
3.3 Eureka集群搭建\t33
3.3.1 本例集群结构图\t33
3.3.2 改造服务器端\t34
3.3.3 改造服务提供者\t35
3.3.4 改造服务调用者\t37
3.3.5 编写REST客户端进行测试\t37
3.4 服务实例的健康自检\t38
3.4.1 程序结构\t39
3.4.2 使用Spring Boot Actuator\t39
3.4.3 实现应用健康自检\t39
3.4.4 服务查询\t42
3.5 Eureka的常用配置\t44
3.5.1 心跳检测配置\t44
3.5.2 注册表抓取间隔\t44
3.5.3 配置与使用元数据\t45
3.5.4 自我保护模式\t45
3.6 本章小结\t46
第4章 负载均衡\t47
4.1 Ribbon介绍\t48
4.1.1 Ribbon简介\t48
4.1.2 Ribbon子模块\t48
4.1.3 负载均衡器组件\t48
4.2 第一个Ribbon程序\t49
4.2.1 编写服务\t49
4.2.2 编写请求客户端\t51
4.2.3 Ribbon的配置\t52
4.3 Ribbon的负载均衡机制\t53
4.3.1 负载均衡器\t53
4.3.2 自定义负载规则\t54
4.3.3 Ribbon自带的负载规则\t56
4.3.4 Ping机制\t57
4.3.5 自定义Ping\t59
4.3.6 其他配置\t59
4.4 在Spring Cloud中使用Ribbon\t60
4.4.1 准备工作\t60
4.4.2 使用代码配置Ribbon\t61
4.4.3 使用配置文件设置Ribbon\t63
4.4.4 Spring使用Ribbon的API\t64
4.5 RestTemplate负载均衡\t66
4.5.1 @LoadBalanced注解概述\t66
4.5.2 编写自定义注解以及拦截器\t66
4.5.3 使用自定义拦截器以及注解\t68
4.5.4 在控制器中使用RestTemplate\t69
4.6 本章小结\t71
第5章 REST客户端Feign\t72
5.1 REST客户端\t73
5.1.1 使用CXF调用REST服务\t73
5.1.2 使用Restlet调用REST服务\t74
5.1.3 Feign框架介绍\t75
5.1.4 第一个Feign程序\t76
5.1.5 请求参数与返回对象\t77
5.2 使用Feign\t78
5.2.1 编码器\t79
5.2.2 解码器\t80
5.2.3 XML的编码与解码\t80
5.2.4 自定义编码器与解码器\t83
5.2.5 自定义Feign客户端\t83
5.2.6 使用第三方注解\t85
5.2.7 Feign解析第三方注解\t86
5.2.8 请求拦截器\t89
5.2.9 接口日志\t89
5.3 在Spring Cloud中使用Feign\t90
5.3.1 Spring Cloud整合Feign\t91
5.3.2 Feign负载均衡\t93
5.3.3 默认配置\t93
5.3.4 自定义配置\t94
5.3.5 可选配置\t97
5.3.6 压缩配置\t98
5.4 本章小结\t98
第6章 Spring Cloud的保护机制\t99
6.1 概述\t100
6.1.1 实际问题\t100
6.1.2 传统的解决方式\t101
6.1.3 集群容错框架Hystrix\t101
6.1.4 Hystrix的功能\t102
6.2 第一个Hystrix程序\t103
6.2.1 准备工作\t103
6.2.2 客户端使用Hystrix\t103
6.2.3 调用错误服务\t105
6.2.4 Hystrix的运作流程\t106
6.3 Hystrix的使用\t108
6.3.1 命令执行\t108
6.3.2 属性配置\t110
6.3.3 回退\t111
6.3.4 回退的模式\t112
6.3.5 断路器开启\t113
6.3.6 断路器关闭\t116
6.3.7 隔离机制\t118
6.3.8 合并请求\t121
6.3.9 请求缓存\t125
6.4 在Spring Cloud中使用Hystrix\t127
6.4.1 整合Hystrix\t128
6.4.2 命令配置\t130
6.4.3 默认配置\t131
6.4.4 缓存注解\t132
6.4.5 合并请求注解\t134
6.4.6 Feign与Hystrix整合\t136
6.4.7 Hystrix监控\t140
6.5 本章小结\t142
第7章 微服务集群网关\t143
7.1 Zuul框架介绍\t144
7.1.1 关于Zuul\t144
7.1.2 Zuul的功能\t144
7.2 在Web项目中使用Zuul\t145
7.2.1 Web项目整合Zuul\t145
7.2.2 测试路由功能\t145
7.2.3 过滤器运行机制\t147
7.3 在微服务集群中初试Zuul\t148
7.3.1 集群搭建\t149
7.3.2 路由到集群服务\t150
7.3.3 Zuul Http客户端\t153
7.4 路由配置\t153
7.4.1 简单路由\t154
7.4.2 跳转路由\t155
7.4.3 Ribbon路由\t155
7.4.4 自定义路由规则\t156
7.4.5 忽略路由\t157
7.5 Zuul的其他配置\t157
7.5.1 请求头配置\t157
7.5.2 路由端点\t158
7.5.3 Zuul与Hystrix\t158
7.5.4 在Zuul中预加载Ribbon\t161
7.6 Zuul功能进阶\t161
7.6.1 过滤器优先级\t161
7.6.2 自定义过滤器\t162
7.6.3 动态加载过滤器\t163
7.6.4 禁用过滤器\t165
7.6.5 请求上下文\t166
7.6.6 @EnableZuulServer注解\t168
7.6.7 error过滤器\t169
7.6.8 动态路由\t171
7.7 本章小结\t172
第8章 微服务与消息驱动\t173
8.1 Spring Cloud Stream介绍\t174
8.1.1 关于Stream框架\t174
8.1.2 Stream框架的组成部分\t174
8.1.3 消息代理中间件\t174
8.2 RabbitMQ框架\t175
8.2.1 RabbitMQ和AMQP\t175
8.2.2 下载与运行\t176
8.2.3 编写生产者\t177
8.2.4 编写消费者\t179
8.2.5 交换器、绑定与队列\t180
8.3 Apache Kafka框架\t181
8.3.1 关于Kafka\t181
8.3.2 运行Kafka服务器\t182
8.3.3 编写生产者\t182
8.3.4 编写消费者\t184
8.3.5 消费者组\t185
8.4 开发消息微服务\t185
8.4.1 准备工作\t186
8.4.2 编写生产者\t187
8.4.3 编写消费者\t188
8.4.4 更换绑定器\t189
8.4.5 Sink、Source与Processor\t190
8.4.6 消费者组\t191
8.5 本章小结\t192
第9章 集群配置中心\t193
9.1 概述\t194
9.1.1 关于Spring Cloud Config\t194
9.1.2 应用结构\t195
9.1.3 引导程序简介\t195
9.1.4 搭建SVN环境\t196
9.2 构建第一个例子\t196
9.2.1 创建服务器\t196
9.2.2 配置SVN仓库\t197
9.2.3 创建客户端\t199
9.2.4 从客户端读取SVN配置\t200
9.2.5 目录配置总结\t201
9.2.6 刷新配置\t202
9.2.7 刷新Bean\t203
9.3 配置的加密和解密\t205
9.3.1 为服务器安装JCE\t205
9.3.2 加密和解密端点\t205
9.3.3 SVN存储加密数据\t206
9.3.4 非对称加密\t207
9.4 其他配置\t207
9.4.1 服务器健康指示器\t207
9.4.2 客户端的错误提前与重试机制\t208
9.4.3 安全配置\t209
9.4.4 访问服务器配置\t210
9.5 整合使用\t210
9.5.1 准备工作\t210
9.5.2 配置服务器、客户端整合Eureka\t212
9.5.3 整合Zuul\t214
9.5.4 整合Spring Cloud Bus刷新配置\t216
9.5.5 刷新单个节点配置\t217
9.6 本章小结\t217
第10章 微服务跟踪\t219
10.1 概述\t220
10.1.1 实际问题与Sleuth\t220
10.1.2 服务跟踪系统\t220
10.1.3 Sleuth的基本概念\t220
10.1.4 项目准备\t221
10.2 Sleuth整合Zipkin\t222
10.2.1 Zipkin简介\t222
10.2.2 构建Zipkin服务器项目\t223
10.2.3 配置微服务\t224
10.2.4 查看数据\t225
10.2.5 使用MySQL保存数据\t228
10.2.6 使用消息采集数据\t230
10.3 Sleuth整合ELK\t232
10.3.1 关于ELK\t232
10.3.2 下载ELK\t233
10.3.3 运行Elasticsearch\t233
10.3.4 使用Logstash读取JSON\t234
10.3.5 使用Kibana展示数据\t235
10.3.6 使用Logback转换JSON\t237
10.4 本章小结\t240
第11章 微服务数据库实战\t241
11.1 概述\t242
11.1.1 关于Spring Data\t242
11.1.2 Spring Data的功能\t243
11.1.3 Spring Data的模块\t243
11.2 Spring Data与JPA\t243
11.2.1 构建项目\t244
11.2.2 数据访问层与业务层\t245
11.2.3 自定义数据存储逻辑\t247
11.2.4 方法名查询\t248
11.2.5 使用@Query注解\t249
11.3 Spring Data与MongoDB\t250
11.3.1 安装MongoDB\t250
11.3.2 配置权限\t251
11.3.3 MongoDB的概念\t252
11.3.4 构建项目\t252
11.3.5 数据访问层与业务层\t253
11.3.6 自定义数据存储逻辑\t254
11.3.7 方法名查询\t256
11.3.8 使用@Query注解\t258
11.4 Spring Data与Redis\t258
11.4.1 Redis的安装与配置\t258
11.4.2 Redis的数据类型\t259
11.4.3 使用Jedis\t260
11.4.4 构建Spring Data项目\t262
11.4.5 数据访问层与业务层\t263
11.4.6 自定义数据存储逻辑\t265
11.4.7 方法名查询\t267
11.5 本章小结\t268
第12章 案例实战\t269
12.1 概述\t270
12.1.1 表现层技术\t270
12.1.2 案例概述\t270
12.1.3 案例技术选型\t270
12.2 Spring Boot与JSP\t271
12.2.1 构建项目\t271
12.2.2 配置\t272
12.2.3 打包部署\t273
12.3 模板引擎Thymeleaf\t274
12.3.1 关于Thymeleaf\t274
12.3.2 Spring Boot整合Thymeleaf\t274
12.3.3 加载资源\t275
12.3.4 获取请求数据\t276
12.3.5 调用Bean方法\t276
12.3.6 遍历集合\t277
12.3.7 表单提交\t277
12.4 图书管理案例\t278
12.4.1 运行案例\t278
12.4.2 案例模块\t279
12.4.3 案例架构\t279
12.4.4 数据库\t280
12.4.5 用户登录\t280
12.4.6 新建图书\t284
12.4.7 图书展示\t286
12.5 本章小结\t287