简介
Eureka 是 Netflix 开发的服务发现框架,本身是一个基于 REST 的服务,主要用于定位运行在 AWS 域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目 spring-cloud-netflix 中,实现 SpringCloud 的服务发现功能。

其实,Eureka 就是一个专门用于服务发现的服务器,一些服务注册到该服务器,而另一些服务通过该服务器查找其所要调用执行的服务。可以充当服务发现服务器的组件很多,例如 Zookeeper、Consul、Eureka 等。

Eureka 体系架构
image.png

快速体验

Eureka server

<!-- eureka服务端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

application.yml

server:
  port: 10080
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10000/eureka
    register-with-eureka: false
    fetch-registry: false

启动类

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApp {

public static void main(String[] args) {
    SpringApplication.run(EurekaServerApp.class, args);

}
}

Eureka client

<!-- client依赖 -->
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.yml

server:
  port: 10010
spring:
  application:
    name: config-server
  
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10080/eureka
  instance:
    prefer-ip-address: true
 ip-address: 127.0.0.1

启动类

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApp {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApp.class, args);
 }
}

Eureka自我保护机制

默认情况下,EurekaServer 在 90 秒内没有检测到服务列表中的某微服务,则会自动将
该微服务从服务列表中删除。但很多情况下并不是该微服务节点(主机)出了问题,而是由
于网络抖动等原因使该微服务无法被 EurekaServer 发现,即无法检测到该微服务主机的心跳。
若在短暂时间内网络恢复正常,但由于 EurekaServer 的服务列表中已经没有该微服务,所以
该微服务已经无法提供服务了。

在短时间内若 EurekaServer 丢失较多微服务,即 EurekaServer 收到的心跳数量小于阈值,
为了保证系统的可用性(AP),给那些由于网络抖动而被认为宕机的客户端“重新复活”的
机会,Eureka 会自动进入自我保护模式:服务列表只可读取、写入,不可执行删除操作。当
EurekaServer 收到的心跳数量恢复到阈值以上时,其会自动退出 Self Preservation 模式。


Lemon
22 声望2 粉丝