一、Eureka介绍
Eureka 提供了基于 REST 的服务,在集群中主要用于服务管理。Eureka提供了基于Java语言的客户端组件,客户端组件实现了负载均衡的功能,为业务组件的集群部署创造了条件。使用该框架,可以将业务组件注册到 Eureka 容器中,这些组件可以进行集群部署,Eureka 主要负责维护这些服务的列表,并自动检查它们的状态。
二、Eureka 架构
一个简单的 Eureka 集群,需要一个 Eureka 服务器、若干个服务提供者;可以将业务组件注册到 Eureka 服务器中,其他客户端组件可以从 Eureka 服务器获取,并且进行远程调用。
例如以上的 Eureka 架构图中有两个服务器,服务器支持集群部署,每个服务器也可以作为对方服务器的客户端进行相互注册与复制。图中的三个 Eureka 客户端,其中的两个用于发布服务,另一个用于调用服务;不管是服务器还是客户端,都可以部署多个实例,这样一来,就很容易构建高可用的服务集群。
三、服务器端
对于注册到服务器端的服务注解,Eureka 服务器并没有提供后台的存储,这些注册的服务实例被保存到内存的注册中心,它们通过心跳来保持其最新状态,这些操作都可以在内存中完成。客户端存在着相同的机制,同样在内存中保存了注册表信息,这样的机制提升了 Eureka 组件的性能,每次服务的请求都不必经过服务器端的注册中心。
四、服务提供者
作为 Eureka 客户端存在的服务提供者,主要进行以下工作:
第一,向服务器注册服务;
第二,发送心跳给服务器;
第三,从服务器端获取注册列表;
当客户端注册到服务器时,它将会提供一些关于自己的信息给服务器端,例如自己的主机、端口号、健康检测连接等。
五、服务调用者
对于发布到 Eureka 服务器的服务,服务调用者可对其进行服务查找与调用,服务调用者也是作为客户端存在的,但其职责主要是发现与调用服务。在实际情况中,有可能出现本身既是服务提供者、又是服务消费者的情况,例如在传统的企业应用三层架构中,服务层会调用数据访问层的接口进行数据操作,它本身也会提供服务给控制层使用。
六、实践案例
1. 创建Maven项目:crazyspringcloud-firsteureka-server,作为 Eureka 服务注册中心:
(1) pom.xml文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sztxtech.creazyspringcloud</groupId>
<artifactId>crazyspringcloud-firsteureka-server</artifactId>
<version>1.0-SNAPSHOT</version>
<name>crazyspringcloud-firsteureka-server</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1<