本书使用的Spring Cloud版本为Dalston.SRl,相关的技术版本如下所示。
> spring-cloud-commons:公共模块,版本为 1.2.2.RELEASE。
> spring-cloud-config:配置管理模块,版本为 1.3.1.RELEASE。
> spring-cloud-netflix: Spring Cloud的核心模块,用于提供服务管理、负载均衡等功 能,版本为 1.3.1.RELEASE。
> spring-cloud-sleuth:服务跟踪模块,版本为 1.2.1.RELEASE。
> spring-cloud-stream:用于构建消息驱动微服务的模块,版本为Chelsea.SR2。
> spring-cloud-bus:消息总线模块,对应版本为1.3.1.RELEASE。
> spring-boot: Spring Cloud 基于 Spring Boot 快速搭建,使用的 Spring Boot 版本为 1.5.3.RELEASEo
Spring Cloud 集成了 Netflix OSS 的多个项目,形成了 spring-cloud-netflix 项目。该项目 包含多个子模块,这些子模块对集成的Netflix旗下的框架进行了封装,
本节将讲述其中一 个较为重要的服务管理框架:Eureka
3.1.1 关于 Eureka
Eureka提供基于REST的服务,在集群中主要用于服务管理。Eureka提供了基于Java 语言的客户端组件,客户端组件实现了负载均衡的功能,为业务组件的集群部署创造了条 件。
使用该框架,可以将业务组件注册到Eureka容器中,这些组件可进行集群部署,Eureka 主要维护这些服务的列表并自动检査它们的状态。
3.1.2 Eureka 架构
一个简单的Eureka集群,需要一个Eureka服务器、若干个服务提供者。我们可以将 业务组件注册到Eureka服务器中,其他客户端组件可以向服务器获取服务并且进行远程调 用。图3-1所示为Eureka的架构图。
图3-1中有两个服务器,服务器支持集群部署,每个服务器也可以作为对方服务器的 客户端进行相互注册与复制。图3-1中所示的三个Eureka客户端,两个用于发布服务,另 一个用于调用服务。不管是服务器还是客户端,都可以部署多个实例,如此一来,就很容 易构建高可用的服务集群。
3.1.3服务器端
对于注册到服务器端的服务组件,Eureka服务器并没有提供后台的存储,这些注册的 服务实例被保存在内存的注册中心,它们通过心跳来保持其最新状态,这些操作都可以在 内存中完成。客户端存在着相同的机制,同样在内存中保存了注册表信息,这样的机制提 升了 Eureka组件的性能,每次服务的请求都不必经过服务器端的注册中心。
3.1.4服务提供者
作为Eureka客户端存在的服务提供者,主要进行以下工作:第一,向服务器注册服务; 第二,发送心跳给服务器;第三,向服务器端获取注册列表。当客户端注册到服务器时, 它将会提供一些关于自己的信息给服务器端,例如自己的主机、端口、健康检测连接等。
3.1.5服务调用者
对于发布到Eureka服务器的服务,服务调用者可对其进行服务查找与调用,服务调用 者也是作为客户端存在的,但其职责主要是发现与调用服务。在实际情况中,有可能出现 本身既是服务提供者,又是服务调用者的情况,例如在传统的企业应用三层架构中,服务 层会调用数据访问层的接口进行数据操作,它本身也会提供服务给控制层使用。
本节对Eureka进行了介绍,读者大概了解Eureka架构及各个角色的作用即可;
3.2.1构建服务器
先创建一个名称为first-ek-server的Maven项目作为服务器,在pom.xml文件中加入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
加入的 spring-cloud-starter-eureka-server 会自动引入 spring-boot-starter-web,因此只需 加入该依赖,我们的项目就具有Web容器的功能了。
接下来,编写一个最简单的启动类, 启动我们的Eureka服务器,启动类如代码清单:
1 2 3 4 5 6 |
|
启动类几乎与前面章节中介绍的Spring Boot项目一致,只是加入了@EnableEurekaServer, 声明这是一个Eureka服务器。直接运行FirstServer即可启动Eureka服务器,需要注意的是,
本例中并没有配置服务器端口,因此默认端口为8080,我们将端口配置为8761;
在 src/main/resources目录下创建application.yml配置文件,内容如下:
1 2 |
|
运行FirstServer的main方法后,可以看到控制台的 输出如下:
1 2 3 4 5 6 |
|
成功启动后,打开浏览器,输入http://localhost:8761,可以看到Eureka 服务器控制台,如图3-2所示。
在图3-2的下方,可以看到服务的实例列表,目前我们并没有注册服务,因此列表 为空。
3.2.2服务器注册开关
在启动Eureka服务器时,会在控制台看到以下两个异常信息:
1 |
|
这是由于在服务器启动时,服务器会把自己当作一个客户端,去注册Eureka服务器, 并且会到Eureka服务器抓取注册信息,它自己本身只是一个服务器,而不是服务的提供者 (客户端),
因此可以修改application.yml文件,修改以下两个配置:
1 2 3 4 |
|
以上配置中的eureka.client.registerWithEureka属性,声明是否将自己的信息注册到 Eureka服务器,默认值为true。属性eureka.client.fetchRegistry则表示,是否到Eureka服务 器中抓取注册信息。
将这两个属性设置为false,启动时不会出现异常信息。
3.2.3编写服务提供者
在前面搭建环境章节,我们使用Spring Boot来建立一个简单的Web工程,并且在里 面编写了一个REST服务,本例中的服务提供者,与该案例类似。
建立名称为 first-ek-service-provider的项目,在pom.xml中加入依赖,如下所示:
1 2 3 4 5 6 7 |
|
在src/main/resources目录中建立application.yml配置文件,文件内容如代码清单:
1 2 3 4 5 6 7 8 9 |
|