前 言
开发、部署和运营云应用程序应该像本地应用程序一样简单。这应该是任何云平台、库或工具背后的管理原则。Spring Cloud可以轻松地为云开发JVM应用程序。本书将介绍Spring Cloud并帮助开发人员掌握其功能。
本书首先介绍如何配置Spring Cloud服务器并运行Eureka服务器以启用服务注册和发现;然后再深入剖析与负载均衡和断路相关的技术,包括利用Feign客户端的所有功能;最后讨论和研究高级主题,包括如何为Spring Cloud实现分布式跟踪解决方案并构建消息驱动的微服务架构。
本书适合的读者
本书对热衷于利用Spring Cloud的开发人员有很强的吸引力。Spring Cloud是一个开源库,可帮助开发人员快速构建分布式系统。了解Java和Spring Framework将对本书的学习很有帮助,但之前不需要接触Spring Cloud。
本书内容综述
本书的写作思路明确,结构简单易懂。全书共分为3个部分,第一部分是“微服务架构和Spring Cloud项目基础知识”,包括第1章~第3章,详细介绍了微服务、Spring Boot和Spring Cloud的基础知识。
? 第1章“微服务简介”,将介绍微服务架构、云环境等。读者将学习并理解基于微服务的应用程序和一体化应用程序之间的区别,同时了解如何迁移到微服务应用程序。
? 第2章“使用微服务的Spring”,将介绍Spring Boot框架。本章将详细说明如何有效地使用Spring Boot框架来创建微服务应用程序。此外还将介绍使用Spring MVC注解创建REST API、使用Swagger2提供API文档,以及使用Spring Boot Actuator端点公开运行状况检查和指标数据等主题。
? 第3章“Spring Cloud概述”,将简要介绍作为Spring Cloud一部分的主要项目。它将侧重于说明Spring Cloud实现的主要模式并将它们分配给特定项目。
本书的第二部分是“微服务架构常见元素和Spring Cloud实现”,包括第4章~第13章,详细介绍了Spring Cloud各个组件的配置和应用。
? 第4章“服务发现”,将使用Spring Cloud Netflix Eureka描述服务发现模式。本章将详细说明如何在独立模式下运行Eureka服务器,以及如何使用对等副本运行多个服务器实例。此外还将介绍如何在客户端启用发现并在不同区域中注册这些客户端。
? 第5章“使用Spring Cloud Config进行分布式配置”,将详细介绍如何在应用程序中使用Spring Cloud Config进行分布式配置。本章将说明如何使用Spring Cloud Bus启用属性源的不同后端存储库并推送更改通知。通过比较发现第一个引导程序和配置第一个引导程序方法,详细说明了发现服务和配置服务器之间的集成。
? 第6章“微服务之间的通信”,将描述参与服务间通信的最重要元素:HTTP客户端和负载均衡器。本章将详细介绍如何在有或没有服务发现的情况下使用Spring RestTemplate、Ribbon和Feign客户端。
? 第7章“高级负载均衡和断路器”,将描述与微服务之间的服务间通信相关的更高级主题。本章将详细介绍如何使用Ribbon客户端实现不同的负载均衡算法,使用Hystrix启用断路器模式并使用Hystrix仪表板监控通信统计信息。
? 第8章“使用API网关进行路由和过滤”,将比较用作Spring云应用程序的API网关和代理的两个项目:Spring Cloud Netlix Zuul和Spring Cloud Gateway。本章将详细介绍如何将它们与服务发现集成,并创建简单而更高级的路由和过滤 规则。
? 第9章“分布式日志记录和跟踪”,将介绍一些流行的工具,用于收集和分析由微服务生成的日志记录和跟踪信息。本章将说明如何使用Spring Cloud Sleuth附加跟踪信息和关联消息,此外还将运行与Elastic Stack集成的示例应用程序,以便发送日志消息,并使用Zipkin来收集跟踪的信息。
? 第10章“其他配置和发现功能”,将介绍两种用于服务发现和分布式配置的流行产品:Consul和ZooKeeper。本章将详细说明如何在本地运行这些工具,并将Spring Cloud应用程序与它们集成在一起。
? 第11章“消息驱动的微服务”,将指导开发人员如何在微服务之间提供异步的、消息驱动的通信。本章将详细介绍如何将RabbitMQ和Apache Kafka消息代理与Spring Cloud应用程序集成,以实现异步一对一和发布/订阅通信方式。
? 第12章“保护API的安全”,将描述保护微服务的各种方法。本章将实现一个由所有先前引入的元素组成的系统,这些元素通过SSL相互通信。此外还将详细说明如何使用OAuth2和JWT令牌来给传入API的请求授权。
? 第13章“测试Java微服务”,将描述微服务测试的不同策略。它将侧重于演示由使用者驱动的契约测试,这尤其适用于基于微服务的环境。此外还将介绍如何使用Hoverfly、Pact、Spring Cloud Contract、Gatling等框架来实现不同类型的自动化测试。
本书的第三部分是“Docker支持和Spring Cloud平台”,包括第14章~第15章,详细介绍了Docker容器、Pivotal Cloud Foundry和Heroku云平台。
? 第14章“Docker支持”,将简要介绍Docker。它将侧重于描述最常用的Docker命令,这些命令用于在容器化环境中运行和监视微服务。此外还将详细说明如何使用流行的持续集成服务器(Jenkins)构建和运行容器,并将它们部署在Kubernetes平台上。
? 第15章“云平台上的Spring微服务”,将介绍两个支持Java应用程序的流行云平台:Pivotal Cloud Foundry和Heroku。本章将详细说明如何使用命令行工具或Web控制台在这些平台上部署、启动、扩展和监视应用程序。
阅读基础
要顺利阅读本书并完成所有代码示例,读者应具备以下基础条件:
? 有效的互联网连接
? Java 8+
? Docker
? Maven
? Git客户端
下载示例代码文件
读者可以从www.packtpub.com下载本书的示例代码文件。具体步骤如下:
(1)登录或注册www.packtpub.com。
(2)选择Support(支持)选项卡。
(3)单击Code Downloads&Errata(代码下载和勘误表)。
(4)在Search(搜索)框中输入图书名称Mastering Spring Cloud,然后按照屏幕上的说明进行操作。
下载文件后,请确保使用最新版本解压缩或解压缩文件夹:
? WinRAR/7-Zip(Windows系统)
? Zipeg/iZip/UnRarX(Mac系统)
? 7-Zip/PeaZip(Linux系统)
该书的代码包也已经在GitHub上托管,网址为https://github.com/PacktPublishing/ Mastering-Spring-Cloud,欢迎访问。
本书约定
本书中使用了许多文本约定。
(1)CodeInText:表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter句柄等。以下段落就是一个示例。
“HTTP API端点(http://localhost:8889/client-service-zone3.yml)的最后一个可用版本,返回与输入文件相同的数据。”
(2)有关代码块的设置如下所示。
org.springframework.cloud
spring-cloud-config-server
(3)当我们希望引起读者对代码块的特定部分的注意时,相关的行或项目以粗体显示。
spring:
rabbitmq:
host: 192.168.99.100
port: 5672
(4)任何命令行输入或输出都采用如下所示的粗体代码形式。
$ curl -H“X-Vault-Token:client”-X GET
http://192.168.99.100:8200/v1/secret/client-service
(5)本书还使用了以下两个图标。
表示警告或重要的注意事项。
表示提示或小技巧。
关于作者
Piotr Mińkowski拥有超过10年的银行和电信行业开发人员和架构师的工作经验。他擅长Java以及与之相关的技术、工具和框架。目前他在波兰的移动运营商Play公司工作,负责IT系统架构。他帮助该公司完成了从一体化应用程序/面向服务的架构(SOA)到基于微服务的架构的迁移工作,还帮助建立了完整的持续集成和持续交付环境。
关于审稿者
Samer ABDELKAFI拥有超过13年的软件架构师和工程师工作经验,主要专注于开源技术。他为不同领域的众多项目做出了贡献,如银行、保险、教育、公共服务和公用事业计费等。2016年年底,他创建了DEVACT,一家专门从事信息技术咨询的公司。除了日常工作之外,Samer还经常在他的博客中分享自己的经验,撰写与Java和Web技术相关的文章。