1. Eureka是什么
Eureka作为Spring Cloud Netflix子项目的注册中心,提供了服务的注册与发现功能。在微服务的项目中,每个服务分布在不同的机器中,而Eureka就用于提供一个平台让所有服务注册进来,并在请求其他服务时从Eureka注册列表中获取地址。
2. Eureka的原理
Eureka框架采用的CS架构,通过一个Server、多个Client来互通并提供功能服务。
Eureka Server作为服务注册的服务端,是服务注册和发现功能的中心,用来管理Eureka Client的注册信息。Eureka Server自身也会作为一个Client注册进来,所有的Eureka Client可以通过Server中的注册列表发现其他的服务。
Eureka Client即是一个Java程序客户端,也就是一个独立运行的服务。Eureka为了Server中管理Client的方便,会对每个Eureka Client进行周期性的心跳检查,保证列表中注册服务的可用性。Eureka Client中为了应对服务之间的请求交互,使用了基于轮询的负载均衡器。
3. Eureka的特点
作为中心节点的Eureka Server,不仅需要定时检查其他Eureka Client的监控状态,还要即使判断自身服务的可行性。如果在15分钟内超过85%的注册节点的心跳出现故障,那么就认为Eureka Server与其他Eurka Client之间的连接出现故障。出现故障时,Eureka会做出如下反应:
- Eureka认为此时可能是网络故障导致,因此不再将Client从Server中移除
- Eureka此时仍然可以接收新服务的注册和查询请求,但是不会与其他节点做同步处理,以保证当前节点可用
- 网络恢复稳定后,这段时间的信息会进行同步处理,不会影响服务的使用
4. Eureka的使用
Eureka作为服务注册和发现中心,分为提供注册和发现功能的服务端和进行注册和被发现的客户端。
4.1 创建服务端EurekaServer
在创建项目时,SpringBoot中已经为我们提供好了相关的启动器信息,创建一个EurekaServer端需要在项目中引入Spring Cloud Discovery下的Eureka Server依赖,以及提供服务正常运行的Spring Web依赖。
此时服务端根据启动器引入的依赖信息为:
<!-- eureka server依赖信息 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- 使用spring cloud时的版本管理,没有时eureka依赖下载失败 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
复制代码
项目创建完成后,为了能够保证服务的正常运行,还需要对项目进行配置。作为Eureka Server服务,首先要在启动类上使用@EnableEurekaServer
注解标注当前项目作为服务端,除此之外,还要在配置文件中定义服务端的配置信息。
# 服务信息
spring.application.name=eureka-server
server.port=8081
# 服务端也作为一个客户端存在,此处关闭其客户端的注册功能
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
# 定义服务端保护机制
eureka.server.enable-self-preservation=true
eureka.server.renewal-percent-threshold=0.5
# 定义注册中心路径
eureka.client.service-url.default-zone=http://${eureka.instance.hostname}:${server.port}/eureka
复制代码
配置完成后,Eureka Server项目就可以正常的启动了,启动成功后控制台输出Eureka启动的信息。
为了更好的管理Eureka Client的注册信息,Eureka Server还提供了一个可视化页面来观察当前注册的服务信息。服务启动后可以访问httP:// {port} ,其中会显示当前注册在Eureka Server服务中的客户端列表信息。
4.2 创建客户端 Eureka Client
创建客户端在流程上和服务端基本是相同的,不过在选择启动器时使用Spring Web和Spring Cloud Discovery Client两个依赖信息。
项目创建后得到的maven依赖信息和Eureka Server服务的大体相同,也是将Server换成了client。
<!--eureka客户端依赖信息 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
复制代码
Eureka Client客户端启动时需要在启动类上标注@EnableEurekaClient注解,同时也要在配置文件中配置上服务本身信息和远程访问注册中心的地址信息。
#服务信息
server.port=8091
spring.application.name=producer
#注册中心路径
eureka.client.serviceUrl.defaultZone=http://localhost:8081/eureka
#心跳间隔检测配置
eureka.instance.lease-renewal-interval-in-seconds=5
eureka.instance.lease-expiration-duration-in-seconds=10
复制代码
配置完成后成功启动项目,就可以看到Client通过配置的路径找到注册中心并将自己注册进去。
此时再次打开Eureka Servel的管理页面,可以看到客户端已经注册进去了。