第1章 欢迎迈入云世界,Spring 1
1.1什么是微服务 1
1.2什么是Spring,为什么它与微服务有关 4
1.3在本书中读者会学到什么 5
1.4为什么本书与你有关 6
1.5使用Spring Boot来构建微服务 6
1.6为什么要改变构建应用的方式 10
1.7云到底是什么 11
1.8为什么是云和微服务 13
1.9微服务不只是编写代码 14
1.9.1核心微服务开发模式 15
1.9.2微服务路由模式 16
1.9.3微服务客户端弹性模式 17
1.9.4微服务安全模式 18
1.9.5微服务日志记录和跟踪模式 19
1.9.6微服务构建和部署模式 20
1.10使用Spring Cloud构建微服务 22
1.10.1 Spring Boot 23
1.10.2 Spring Cloud Config 23
1.10.3 Spring Cloud服务发现 24
1.10.4 Spring Cloud与Netflix Hystrix和Netflix Ribbon 24
1.10.5 Spring Cloud与Netflix Zuul 24
1.10.6 Spring Cloud Stream 24
1.10.7 Spring Cloud Sleuth 24
1.10.8 Spring Cloud Security 25
1.10.9代码供应 25
1.11通过示例来介绍Spring Cloud 25
1.12确保本书的示例是有意义的 27
1.13小结 28
第2章 使用Spring Boot构建微服务 29
2.1架构师的故事:设计微服务架构 31
2.1.1分解业务问题 31
2.1.2建立服务粒度 32
2.1.3互相交流:定义服务接口 35
2.2何时不应该使用微服务 36
2.2.1构建分布式系统的复杂性 36
2.2.2服务器散乱 36
2.2.3应用程序的类型 36
2.2.4数据事务和一致性 37
2.3开发人员的故事:用Spring Boot和Java构建微服务 37
2.3.1从骨架项目开始 37
2.3.2引导Spring Boot应用程序:编写引导类 39
2.3.3构建微服务的入口:Spring Boot控制器 40
2.4 DevOps工程师的故事:构建运行时的严谨性 44
2.4.1服务装配:打包和部署微服务 46
2.4.2服务引导:管理微服务的配置 47
2.4.3服务注册和发现:客户端如何与微服务通信 48
2.4.4传达微服务的“健康状况” 49
2.5将视角综合起来 51
2.6小结 52
第3章 使用Spring Cloud配置服务器控制配置 53
3.1管理配置(和复杂性) 54
3.1.1配置管理架构 55
3.1.2实施选择 56
3.2构建Spring Cloud配置服务器 58
3.2.1创建Spring Cloud Config引导类 61
3.2.2使用带有文件系统的Spring Cloud配置服务器 62
3.3将Spring Cloud Config与Spring Boot客户端集成 64
3.3.1建立许可证服务对Spring Cloud Config服务器的依赖 65
3.3.2配置许可证服务以使用Spring Cloud Config 66
3.3.3使用Spring Cloud配置服务器连接数据源 69
3.3.4使用@Value注解直接读取属性 72
3.3.5使用Spring Cloud配置服务器和Git 73
3.3.6使用Spring Cloud配置服务器刷新属性 73
3.4保护敏感的配置信息 75
3.4.1下载并安装加密所需的Oracle JCE jar 75
3.4.2创建加密密钥 76
3.4.3加密和解密属性 76
3.4.4配置微服务以在客户端使用加密 78
3.5最后的想法 79
3.6小结 80
第4章 服务发现 81
4.1我的服务在哪里 82
4.2云中的服务发现 84
4.2.1服务发现架构 84
4.2.2使用Spring和Netflix Eureka进行服务发现实战 87
4.3构建Spring Eureka服务 88
4.4通过Spring Eureka注册服务 90
4.5使用服务发现来查找服务 93
4.5.1使用Spring DiscoveryClient查找服务实例 95
4.5.2使用带有Ribbon功能的Spring RestTemplate调用服务 97
4.5.3使用Netflix Feign客户端调用服务 98
4.6小结 100
第5章 使用Spring Cloud和Netflix Hystrix的客户端弹性模式 101
5.1什么是客户端弹性模式 102
5.1.1客户端负载均衡模式 103
5.1.2断路器模式 103
5.1.3后备模式 103
5.1.4舱壁模式 104
5.2为什么客户端弹性很重要 104
5.3进入Hystrix 107
5.4搭建许可服务器以使用Spring Cloud和Hystrix 107
5.5使用Hystrix实现断路器 109
5.5.1对组织微服务的调用超时 111
5.5.2定制断路器的超时时间 112
5.6后备处理 113
5.7实现舱壁模式 115
5.8基础进阶——微调Hystrix 118
5.9线程上下文和Hystrix 122
5.9.1 ThreadLocal与Hystrix 122
5.9.2 HystrixConcurrencyStrategy实战 125
5.10小结 129
第6章 使用Spring Cloud和Zuul进行服务路由 131
6.1什么是服务网关 132
6.2 Spring Cloud和Netflix Zuul简介 133
6.2.1建立一个Zuul Spring Boot项目 134
6.2.2为Zuul服务使用Spring Cloud注解 134
6.2.3配置Zuul与Eureka进行通信 135
6.3在Zuul中配置路由 135
6.3.1通过服务发现自动映射路由 136
6.3.2使用服务发现手动映射路由 137
6.3.3使用静态URL手动映射路由 140
6.3.4动态重新加载路由配置 142
6.3.5 Zuul和服务超时 143
6.4 Zuul的真正威力:过滤器 144
6.5构建第一个生成关联ID的Zuul前置过滤器 147
6.6构建接收关联ID的后置过滤器 155
6.7构建动态路由过滤器 157
6.7.1构建路由过滤器的骨架 159
6.7.2实现run()方法 159
6.7.3转发路由 161
6.7.4整合 162
6.8小结 163
第7章 保护微服务 164
7.1 OAuth2简介 165
7.2从小事做起:使用Spring和OAuth2来保护单个端点 167
7.2.1建立EagleEye OAuth2验证服务 167
7.2.2使用OAuth2服务注册客户端应用程序 168
7.2.3配置EagleEye用户 171
7.2.4验证用户 172
7.3使用OAuth2保护组织服务 175
7.3.1将Spring Security和OAuth2 jar添加到各个服务 176
7.3.2配置服务以指向OAuth2验证服务 176
7.3.3定义谁可以访问服务 177
7.3.4传播OAuth2访问令牌 180
7.4 JSON Web Token与OAuth2 183
7.4.1修改验证服务以颁发JWT令牌 184
7.4.2在微服务中使用JWT 188
7.4.3扩展JWT令牌 189
7.4.4从JWT令牌中解析自定义字段 191
7.5关于微服务安全的总结 193
7.6小结 195
第8章 使用Spring Cloud Stream的事件驱动架构 196
8.1为什么使用消息传递、EDA和微服务 197
8.1.1使用同步请求-响应方式来传达状态变化 198
8.1.2使用消息传递在服务之间传达状态更改 199
8.1.3消息传递架构的缺点 201
8.2 Spring Cloud Stream简介 202
8.3编写简单的消息生产者和消费者 205
8.3.1在组织服务中编写消息生产者 205
8.3.2在许可证服务中编写消息消费者 210
8.3.3在实际操作中查看消息服务 213
8.4 Spring Cloud Stream用例:分布式缓存 214
8.4.1使用Redis来缓存查找 215
8.4.2定义自定义通道 221
8.4.3将其全部汇集在一起:在收到消息时清除缓存 222
8.5小结 223
第9章 使用Spring Cloud Sleuth和Zipkin进行分布式跟踪 224
9.1 Spring Cloud Sleuth与关联ID 225
9.1.1将Spring Cloud Sleuth添加到许可证服务和组织服务中 226
9.1.2剖析Spring Cloud Sleuth跟踪 226
9.2日志聚合与Spring Cloud Sleuth 227
9.2.1 Spring Cloud Sleuth与Papertrail实现实战 229
9.2.2创建Papertrail账户并配置syslog连接器 230
9.2.3将Docker输出重定向到Papertrail 232
9.2.4在Papertrail中搜索Spring Cloud Sleuth的跟踪ID 234
9.2.5使用Zuul将关联ID添加到HTTP响应 235
9.3使用Open Zipkin进行分布式跟踪 237
9.3.1添加Spring Cloud Sleuth和Zipkin依赖项 238
9.3.2配置服务以指向Zipkin 238
9.3.3安装和配置Zipkin服务器 239
9.3.4设置跟踪级别 240
9.3.5使用Zipkin跟踪事务 241
9.3.6可视化更复杂的事务 243
9.3.7捕获消息传递跟踪 244
9.3.8添加自定义跨度 246
9.4小结 248
第10章 部署微服务 250
10.1 EagleEye:在云中建立核心基础设施 251
10.1.1使用亚马逊的RDS创建PostgreSQL数据库 253
10.1.2在AWS中创建Redis集群 257
10.1.3创建ECS集群 258
10.2超越基础设施:部署EagleEye 262
10.3构建和部署管道的架构 265
10.4构建和部署管道实战 268
10.5开始构建和部署管道:GitHub和Travis CI 270
10.6使服务能够在Travis CI中构建 270
10.6.1构建的核心运行时配置 273
10.6.2安装预构建工具 275
10.6.3执行构建 277
10.6.4标记源代码 277
10.6.5构建微服务并创建Docker镜像 279
10.6.6将镜像推送到Docker Hub 279
10.6.7在Amazon ECS中启动服务 280
10.6.8启动平台测试 280
10.7关于构建和部署管道的总结 282
10.8小结 282
附录A 在桌面运行云服务 283
附录B OAuth2授权类型 291