简介
Eureka 是 Netflix 开发的服务发现框架,本身是一个基于 REST 的服务,主要用于定位运行在 AWS 域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目 spring-cloud-netflix 中,实现 SpringCloud 的服务发现功能。
其实,Eureka 就是一个专门用于服务发现的服务器,一些服务注册到该服务器,而另一些服务通过该服务器查找其所要调用执行的服务。可以充当服务发现服务器的组件很多,例如 Zookeeper、Consul、Eureka 等。
Eureka 体系架构
快速体验
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 模式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。