1. 简介
Eureka是一个基于REST的服务,主要用于服务的注册和发现,以达到负载均衡和中间层服务故障转移的目的。
作用与zookeeper类似,都可以作为服务注册中心
2. 体系结构
执行流程:
- 服务提供者在启动时,向注册中心注册自己提供的服务
- 服务消费者在启动时,向注册中心订阅自己所需的服务
- 注册中心返回服务提供者地址给消费者
- 服务消费者从提供者地址中调用消费者
两个组件:
-
Eureka Server 服务端
指的是服务注册中心,提供服务的注册和发现
注册中心会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到
-
Euraka Client 客户端
指的是服务提供者和消费者,在应用程序启动时会和服务端进行交互,注册或订阅服务
3. 搭建服务注册中心
步骤:
-
创建项目,勾选Eureka Server
-
编辑pom.xml文件,配置依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> <!-- https://start.spring.io/actuator/info --> </parent> <groupId>com.example</groupId> <artifactId>spring-cloud-eureka</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-cloud-eureka</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.SR12</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
-
编辑application.yml文件,配置eureka
server:
port: 7001
eureka:
client:
# 是否将自己注册到Eureka-Server中,默认的为true
register-with-eureka: false
# 是否从Eureka-Server中获取服务提供者的注册信息,默认为true
fetch-registry: false
# 设置服务注册中心的地址
service-url:
defaultZone: http://localhost:${server.port}/eureka/
-
编辑启动类,启用Eureka服务器
@SpringBootApplication @EnableEurekaServer // 启用Eureka服务器 public class CloudEureka7001Application { public static void main(String[] args) { SpringApplication.run(CloudEureka7001Application.class, args); } }
-
访问Eureka-Server服务管理平台
通过浏览器访问
localhost:7001
4. 注册服务
步骤:
-
编辑pom.xml文件,配置Eureka-Client依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
注:如果是新建项目,可以勾选Eureka Discovery Client
-
编辑application.yml文件,配置eureka
server: port: 8001 spring: application: # 应用名,在注册中心显示的服务名 name: user-provider eureka: client: # 指定服务注册中心的地址 service-url: defaultZone: http://localhost:7001/eureka/
-
编辑启动类,启用Eureka客户端
@SpringBootApplication @EnableEurekaClient // 启用Eureka客户端 public class CloudProvider8001Application { public static void main(String[] args) { SpringApplication.run(CloudProvider8001Application.class, args); } }
5. 自我保护机制
在某个时刻,如果某个服务不可用了,Eureka不会立即的清理该服务, 依旧会对该服务的信息进行保存
默认情况下,微服务在Eureka上注册后,会每30秒发送心跳包,Eureka通过心跳来判断服务是否健康,如果Eureka的Server在一定时间内(默认90s),没有接收到某个微服务实例的心跳,将会注销该实例。
但是当网络发生故障时,通常会导致Eureka Server在短时间内无法收到大批微服务的心跳,但微服务自身是正常的,只是网络通信出现了故障。
考虑到这种情况,Eureka设置了一个阀值,当心跳失败的比例在15分钟之内低于85%时,Eureka Server认为很大程度上出现了网络故障,将不再删除心跳过期的微服务,尽可能的保护这些注册信息,自动进入 自我保护模式。
当网络故障被解决时,服务将自动退出 自我保护模式
可以关闭自我保护机制 eureka.server.enable-self-preservation=false