《Spring微服务实战(第2版)》是由人民邮电出版社出版的一本关于Spring方面的书籍,作者是约翰·卡内尔,主要介绍了关于Spring、微服务方面的知识内容,目前在Spring类书籍综合评分为:9.2分。
书籍介绍
内容简介
本书以一个名为O-stock的项目为主线,介绍云、微服务等概念以及SpringBoot和SpringCloud等诸多Spring项目,并介绍如何将O-stock项目一步一步地从单体架构重构成微服务架构,进而将这个项目拆分成众多微服务,让它们运行在各自的Docker容器中,实现持续集成/持续部署,并终自动部署到云环境(AWS)的Kubernetes集群中。针对在重构过程中遇到的各种微服务开发会面临的典型问题(包括开发、测试和运维等问题),本书介绍了解决这些问题的核心模式,以及在实战中如何选择特定SpringCloud子项目或其他工具(如KeyCloak、Zipkin、ELK技术栈)解决这些问题。本书适合拥有构建分布式应用程序的经验、拥有Spring的知识背景以及对学习构建基于微服务的应用程序感兴趣的Java开发人员阅读。对于希望使用微服务构建基于云的应用程序,以及希望了解如何将基于微服务的应用部署到云上的开发人员,本书也具有很好的学习参考价值。
目录
- 第1章欢迎迈入云世界,Spring1
- 1.1微服务架构的演进1
- 1.1.1n层架构2
- 1.1.2什么是单体架构2
- 1.1.3什么是微服务3
- 1.1.4为什么要改变构建应用的方式5
- 1.2使用Spring开发微服务6
- 1.3我们在构建什么7
- 1.4本书涵盖什么内容8
- 1.4.1在本书中你会学到什么8
- 1.4.2为什么本书与你有关9
- 1.5云和基于微服务的应用程序9
- 1.5.1使用SpringBoot来构建微服务10
- 1.5.2云计算到底是什么14
- 1.5.3为什么是云和微服务16
- 1.6微服务不只是编写代码17
- 1.7核心开发模式18
- 1.8路由模式19
- 1.9客户端弹性模式21
- 1.10安全模式22
- 1.11日志记录和跟踪模式23
- 1.12应用程序度量模式24
- 1.13构建/部署模式25
- 1.14小结26
- 第2章使用SpringCloud探索微服务世界27
- 2.1什么是SpringCloud27
- 2.1.1SpringCloudConfig28
- 2.1.2SpringCloud服务发现29
- 2.1.3SpringCloudLoadBalancer和Resilience4j29
- 2.1.4SpringCloudAPIGateway29
- 2.1.5SpringCloudStream29
- 2.1.6SpringCloudSleuth30
- 2.1.7SpringCloudSecurity30
- 2.2通过示例来介绍SpringCloud30
- 2.3如何构建云原生微服务32
- 2.3.1代码库34
- 2.3.2依赖35
- 2.3.3配置35
- 2.3.4后端服务36
- 2.3.5构建、发布和运行37
- 2.3.6进程37
- 2.3.7端口绑定38
- 2.3.8并发38
- 2.3.9可任意处置38
- 2.3.10开发环境/生产环境等同38
- 2.3.11日志39
- 2.3.12管理进程39
- 2.4确保本书的示例是有意义的40
- 2.5使用SpringBoot和Java来构建微服务40
- 2.5.1设置环境41
- 2.5.2从骨架项目开始41
- 2.5.3引导SpringBoot应用程序:编写引导类45
- 2.6小结46
- 第3章使用SpringBoot构建微服务48
- 3.1架构师的故事:设计微服务架构49
- 3.1.1分解业务问题49
- 3.1.2建立服务粒度51
- 3.1.3定义服务接口53
- 3.2何时不要使用微服务53
- 3.2.1构建分布式系统时的复杂性54
- 3.2.2服务器或容器散乱54
- 3.2.3应用程序的类型54
- 3.2.4数据事务和一致性54
- 3.3开发人员的故事:用SpringBoot和Java构建微服务55
- 3.3.1构建微服务的入口:SpringBoot控制器55
- 3.3.2将国际化添加到许可证服务64
- 3.3.3实现SpringHATEOAS来显示相关的链接68
- 3.4DevOps故事:构建运行时的严谨性71
- 3.4.1服务装配:打包和部署微服务72
- 3.4.2服务引导:管理微服务的配置73
- 3.4.3服务注册和发现:客户端如何与微服务通信74
- 3.4.4传达微服务的健康状况75
- 3.5将视角综合起来77
- 3.6小结77
- 第4章欢迎来到Docker79
- 4.1容器还是虚拟机80
- 4.2Docker是什么81
- 4.3Dockerfile83
- 4.4DockerCompose84
- 4.5集成Docker与微服务86
- 4.5.1构建Docker镜像86
- 4.5.2使用SpringBoot创建Docker镜像91
- 4.5.3使用DockerCompose启动服务93
- 4.6小结94
- 第5章使用SpringCloudConfig服务器端控制配置96
- 5.1关于管理配置(和复杂性)97
- 5.1.1配置管理架构97
- 5.1.2实施选择99
- 5.2构建SpringCloudConfig服务器端100
- 5.2.1创建SpringCloudConfig引导类104
- 5.2.2使用带有文件系统的SpringCloudConfig服务器端105
- 5.2.3创建服务的配置文件106
- 5.3将SpringCloudConfig与SpringBoot客户端集成110
- 5.3.1建立许可证服务的SpringCloudConfig服务依赖项111
- 5.3.2配置许可证服务以使用SpringCloudConfig112
- 5.3.3使用SpringCloudConfig服务器端连接数据源115
- 5.3.4使用@ConfigurationProperties直接读取属性118
- 5.3.5使用SpringCloudConfig服务器端刷新属性119
- 5.3.6使用SpringCloudConfig服务器端和Git120
- 5.3.7使用SpringCloudConfig服务集成Vault122
- 5.3.8VaultUI122
- 5.4保护敏感配置信息125
- 5.4.1创建对称加密密钥125
- 5.4.2加密和解密属性126
- 5.5后的想法128
- 5.6小结128
- 第6章关于服务发现129
- 6.1我的服务在哪里130
- 6.2云中的服务发现132
- 6.2.1服务发现架构132
- 6.2.2使用Spring和NetflixEureka进行服务发现实战135
- 6.3构建SpringEureka服务136
- 6.4通过SpringEureka注册服务141
- 6.4.1Eureka的RESTAPI144
- 6.4.2Eureka仪表板145
- 6.5使用服务发现来查找服务146
- 6.5.1使用SpringDiscoveryClient查找服务实例148
- 6.5.2使用带有LoadBalancer功能的SpringRest模板调用服务150
- 6.5.3使用NetflixFeign客户端调用服务152
- 6.6小结153
- 第7章当糟糕的事情发生时:使用SpringCloud和Resilience4j的弹性模式154
- 7.1什么是客户端弹性模式155
- 7.1.1客户端负载均衡模式156
- 7.1.2断路器模式156
- 7.1.3后备模式156
- 7.1.4舱壁模式156
- 7.2为什么客户端弹性很重要157
- 7.3实现Resilience4j160
- 7.4设置许可证服务以使用SpringCloud和Resilience4j160
- 7.5实现断路器162
- 7.5.1向组织服务添加断路器166
- 7.5.2定制断路器166
- 7.6后备处理168
- 7.7实现舱壁模式169
- 7.8实现重试模式172
- 7.9实现限流器模式174
- 7.10ThreadLocal和Resilience4j176
- 7.11小结180
- 第8章使用SpringCloudGateway进行服务路由182
- 8.1什么是服务网关183
- 8.2SpringCloudGateway简介184
- 8.2.1建立SpringCloudGateway项目185
- 8.2.2配置SpringCloudGateway与Eureka进行通信188
- 8.3在SpringCloudGateway中配置路由189
- 8.3.1通过服务发现自动映射路由189
- 8.3.2使用服务发现手动映射路由191
- 8.3.3动态重新加载路由配置194
- 8.4SpringCloudGateway的真正威力:断言和过滤器工厂194
- 8.4.1内置的断言工厂195
- 8.4.2内置的过滤器工厂196
- 8.4.3自定义过滤器197
- 8.5构建前置过滤器200
- 8.6在服务中使用关联ID203
- 8.6.1UserContextFilter:拦截传入的HTTP请求205
- 8.6.2UserContext:使服务易于访问HTTP206
- 8.6.3自定义RestTemplate和UserContextInteceptor:确保关联ID被传播207
- 8.7构建接收关联ID的后置过滤器208
- 8.8小结210
- 第9章保护微服务211
- 9.1OAuth2是什么212
- 9.2Keycloak简介213
- 9.3从小事做起:使用Spring和Keycloak来保护单个端点214
- 9.3.1将Keycloak服务添加到Docker214
- 9.3.2设置Keycloak215
- 9.3.3注册客户端应用程序218
- 9.3.4配置O-stock用户222
- 9.3.5对O-stock用户进行身份认证224
- 9.4使用Keycloak保护组织服务227
- 9.4.1将SpringSecurity和KeycloakJAR添加到各个服务228
- 9.4.2配置服务以指向Keycloak服务228
- 9.4.3定义什么和谁可以访问服务229
- 9.4.4传播访问令牌233
- 9.4.5从JWT中解析自定义字段239
- 9.5关于微服务安全的一些总结240
- 9.5.1对所有业务通信使用HTTPS/安全套接字层(SSL)241
- 9.5.2使用服务网关访问微服务241
- 9.5.3将服务划分到公共API和私有API241
- 9.5.4通过封锁不需要的网络端口来限制微服务的攻击面241
- 9.6小结242
- 第10章使用SpringCloudStream的事件驱动架构243
- 10.1消息传递、EDA和微服务的案例244
- 10.1.1使用同步请求-响应方式来传达状态变化244
- 10.1.2使用消息传递在服务之间传达状态更改246
- 10.1.3消息传递架构的缺点248
- 10.2SpringCloudStream简介249
- 10.3编写简单的消息生产者和消费者251
- 10.3.1在Docker中配置ApacheKafka和Redis252
- 10.3.2在组织服务中编写消息生产者252
- 10.3.3在许可证服务中编写消息消费者258
- 10.3.4在实际操作中查看消息服务261
- 10.4SpringCloudStream用例:分布式缓存262
- 10.4.1使用Redis来缓存查找263
- 10.4.2定义自定义通道269
- 10.5小结271
- 第11章使用SpringCloudSleuth和Zipkin进行分布式跟踪272
- 11.1SpringCloudSleuth与关联ID273
- 11.1.1将SpringCloudSleuth添加到许可证服务和组织服务中274
- 11.1.2剖析SpringCloudSleuth跟踪274
- 11.2日志聚合与SpringCloudSleuth275
- 11.2.1SpringCloudSleuth/ELK技术栈实现实战277
- 11.2.2在服务中配置Logback278
- 11.2.3在Docker中定义和运行ELK技术栈应用程序281
- 11.2.4配置Kibana284
- 11.2.5在Kibana中搜索SpringCloudSleuth的跟踪ID287
- 11.2.6使用SpringCloudGateway将关联ID添加到HTTP响应288
- 11.3使用Zipkin进行分布式跟踪290
- 11.3.1设置SpringCloudSleuth和Zipkin依赖项291
- 11.3.2配置服务以指向Zipkin291
- 11.3.3配置Zipkin服务器端292
- 11.3.4设置跟踪级别293
- 11.3.5使用Zipkin跟踪事务293
- 11.3.6可视化更复杂的事务296
- 11.3.7捕获消息传递踪迹297
- 11.3.8添加自定义跨度299
- 11.4小结301
- 第12章部署微服务303
- 12.1构建/部署管道的架构304
- 12.2在云中设置O-stock的核心基础设施307
- 12.2.1使用亚马逊的RDS创建PostgreSQL数据库309
- 12.2.2在AWS中创建Redis集群312
- 12.3超越基础设施:部署O-stock和ELK313
- 12.3.1创建运行EKL的EC2实例313
- 12.3.2在EC2实例中部署ELK技术栈316
- 12.3.3创建一个EKS集群317
- 12.4构建/部署管道实战323
- 12.5创建构建/部署管道324
- 12.5.1设置GitHub325
- 12.5.2使服务能够在Jenkins中构建326
- 12.5.3理解并生成管道脚本330
- 12.5.4创建Kubernetes管道脚本332
- 12.6关于构建/部署管道的总结333
- 12.7小结334
- 附录A微服务架构实践335
- A.1Richardson成熟度模型335
- A.2SpringHATEOAS337
- A.3外部化配置337
- A.4持续集成和持续交付338
- A.5监控339
- A.6日志记录339
- A.7API网关340
- 附录BOAuth2授权类型341
- B.1密码授权类型341
- B.2客户端凭据授权类型343
- B.3授权码授权类型344
- B.4隐式授权类型345
- B.5如何刷新令牌347
- 附录C监控微服务349
- C.1引入SpringBootActuator进行监控349
- C.1.1添加SpringBootActuator349
- C.1.2启用Actuator端点350
- C.2设置Micrometer和Prometheus351
- C.2.1了解Micrometer和Prometheus351
- C.2.2实现Micrometer和Prometheus352
- C.3配置Grafana354
- C.4小结358