编辑推荐

适读人群:《Spring微服务实战》适合拥有构建分布式应用程序的经验、拥有Spring的知识背景以及对学习构建基于微服务的应用程序感兴趣的Java开发人员阅读。对于希望使用微服务构建基于云的应用程序,以及希望了解如何将基于微服务的应用部署到云上的开发人员,《Spring微服务实战》也具有很好的学习参考价值。

微服务将代码分解为小型的、分布式的独立服务,这些服务需要深谋远虑和仔细设计。SpringBoot和SpringCloud简化了微服务应用程序。就像Spring框架简化了企业级Java开发一样,SpringBoot移除了与编写基于REST的服务有关的样板代码。SpringCloud提供了一套工具,用于微服务发现、路由以及将微服务部署到企业和云中。

Spring微服务实战》教读者如何使用Java和Spring平台构建基于微服务的应用程序。在构建和部署第1个SpringCloud应用程序时,读者将学习如何进行微服务设计。在《Spring微服务实战》中,精心挑选的真实案例展示了基于微服务的各种模式,这些模式用于配置、路由、扩展和部署服务。读者将了解Spring易于使用的工具,并看到其如何助力用微服务来增强和重构现有的应用程序。

Spring微服务实战》主要内容

●核心微服务设计原则。

●使用SpringCloudConfig管理配置。

●使用Spring、Hystrix和Ribbon实现客户端弹性。

●使用NetflixZuul进行智能路由。

●部署SpringCloud应用程序。

Spring微服务实战》是为具有Java和Spring经验的开发人员编写的。

内容简介

Spring微服务实战》以一个名为EagleEye的项目为主线,介绍云、微服务等概念以及SpringBoot和SpringCloud等诸多Spring项目,并介绍如何将EagleEye项目一步一步地从单体架构重构成微服务架构,进而将这个项目拆分成众多微服务,让它们运行在各自的Docker容器中,实现持续集成/持续部署,并最终自动部署到云环境(美亚)中。针对在重构过程中遇到的各种微服务开发会面临的典型问题(包括开发、测试和运维等问题),《Spring微服务实战》介绍了解决这些问题的核心模式,以及在实战中如何选择特定SpringCloud子项目或其他工具解决这些问题。

Spring微服务实战》适合拥有构建分布式应用程序的经验、拥有Spring的知识背景以及对学习构建基于微服务的应用程序感兴趣的Java开发人员阅读。对于希望使用微服务构建基于云的应用程序,以及希望了解如何将基于微服务的应用部署到云上的开发人员,《Spring微服务实战》也具有很好的学习参考价值。

作者简介

约翰·卡内尔(JohnCarnell)是一位知名云工程师,拥有20年的Java开发经验。他大部分时间都在使用AWS平台构建基于电话的微服务。他的日常工作主要是设计和构建跨Java、Clojure和Go等多种技术平台的微服务。

目录

目录

第 1章欢迎迈入云世界,Spring 1

1.1 什么是微服务 1

1.2 什么是Spring,为什么它与微服务有关 4

1.3 在《Spring微服务实战》中读者会学到什么 5

1.4 为什么《Spring微服务实战》与你有关 6

1.5 使用SpringBoot来构建微服务 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 使用SpringCloud构建微服务 22

1.10.1 SpringBoot 23

1.10.2 SpringCloudConfig 23

1.10.3 SpringCloud服务发现 24

1.10.4 SpringCloud与NetflixHystrix和NetflixRibbon 24

1.10.5 SpringCloud与NetflixZuul 24

1.10.6 SpringCloudStream 24

1.10.7 SpringCloudSleuth 24

1.10.8 SpringCloudSecurity 25

1.10.9 代码供应 25

1.11 通过示例来介绍SpringCloud 25

1.12 确保《Spring微服务实战》的示例是有意义的 27

1.13 小结 28

第 2章使用SpringBoot构建微服务 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 开发人员的故事:用SpringBoot和Java构建微服务 37

2.3.1 从骨架项目开始 37

2.3.2 引导SpringBoot应用程序:编写引导类 39

2.3.3 构建微服务的入口:SpringBoot控制器 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章 使用SpringCloud配置服务器控制配置 53

3.1 管理配置(和复杂性) 54

3.1.1 配置管理架构 55

3.1.2 实施选择 56

3.2 构建SpringCloud配置服务器 58

3.2.1 创建SpringCloudConfig引导类 61

3.2.2 使用带有文件系统的SpringCloud配置服务器 62

3.3 将SpringCloudConfig与SpringBoot客户端集成 64

3.3.1 建立许可证服务对SpringCloudConfig服务器的依赖 65

3.3.2 配置许可证服务以使用SpringCloudConfig 66

3.3.3 使用SpringCloud配置服务器连接数据源 69

3.3.4 使用@Value注解直接读取属性 72

3.3.5 使用SpringCloud配置服务器和Git 73

3.3.6 使用SpringCloud配置服务器刷新属性 73

3.4 保护敏感的配置信息 75

3.4.1 下载并安装加密所需的OracleJCEjar 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和NetflixEureka进行服务发现实战 87

4.3 构建SpringEureka服务 88

4.4 通过SpringEureka注册服务 90

4.5 使用服务发现来查找服务 93

4.5.1 使用SpringDiscoveryClient查找服务实例 95

4.5.2 使用带有Ribbon功能的SpringRestTemplate调用服务 97

4.5.3 使用NetflixFeign客户端调用服务 98

4.6 小结 100

第5章 使用SpringCloud和NetflixHystrix的客户端弹性模式 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 搭建许可服务器以使用SpringCloud和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章 使用SpringCloud和Zuul进行服务路由 131

6.1 什么是服务网关 132

6.2 SpringCloud和NetflixZuul简介 133

6.2.1 建立一个ZuulSpringBoot项目 134

6.2.2 为Zuul服务使用SpringCloud注解 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 建立EagleEyeOAuth2验证服务 167

7.2.2 使用OAuth2服务注册客户端应用程序 168

7.2.3 配置EagleEye用户 171

7.2.4 验证用户 172

7.3 使用OAuth2保护组织服务 175

7.3.1 将SpringSecurity和OAuth2jar添加到各个服务 176

7.3.2 配置服务以指向OAuth2验证服务 176

7.3.3 定义谁可以访问服务 177

7.3.4 传播OAuth2访问令牌 180

7.4 JSONWebToken与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章 使用SpringCloudStream的事件驱动架构 196

8.1 为什么使用消息传递、EDA和微服务 197

8.1.1 使用同步请求-响应方式来传达状态变化 198

8.1.2 使用消息传递在服务之间传达状态更改 199

8.1.3 消息传递架构的缺点 201

8.2 SpringCloudStream简介 202

8.3 编写简单的消息生产者和消费者 205

8.3.1 在组织服务中编写消息生产者 205

8.3.2 在许可证服务中编写消息消费者 210

8.3.3 在实际操作中查看消息服务 213

8.4 SpringCloudStream用例:分布式缓存 214

8.4.1 使用Redis来缓存查找 215

8.4.2 定义自定义通道 221

8.4.3 将其全部汇集在一起:在收到消息时清除缓存 222

8.5 小结 223

第9章 使用SpringCloudSleuth和Zipkin进行分布式跟踪 224

9.1 SpringCloudSleuth与关联ID 225

9.1.1 将SpringCloudSleuth添加到许可证服务和组织服务中 226

9.1.2 剖析SpringCloudSleuth跟踪 226

9.2 日志聚合与SpringCloudSleuth 227

9.2.1 SpringCloudSleuth与Papertrail实现实战 229

9.2.2 创建Papertrail账户并配置syslog连接器 230

9.2.3 将Docker输出重定向到Papertrail 232

9.2.4 在Papertrail中搜索SpringCloudSleuth的跟踪ID 234

9.2.5 使用Zuul将关联ID添加到HTTP响应 235

9.3 使用OpenZipkin进行分布式跟踪 237

9.3.1 添加SpringCloudSleuth和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和TravisCI 270

10.6 使服务能够在TravisCI中构建 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 将镜像推送到DockerHub 279

10.6.7 在AmazonECS中启动服务 280

10.6.8 启动平台测试 280

10.7 关于构建和部署管道的总结 282

10.8 小结 282

附录A 在桌面运行云服务 283

附录B OAuth2授权类型 291


其他推荐