一. 简介

1. Eureka是一个基于REST的服务,包含Server和Client两部分,实现微服务的注册与发现;

2. Service提供服务发现的能力,各个微服务启动时,会向Server注册自己的信息,如IP,端口,微服务名称等,Server会存储这些信息;

3. Client是一个Java客户端,用于简化与Server的交互;

4. 微服务启动后,会周期性的向Server发送心跳以续约自己的“租期”;

5. 如果Server在一定时间内没有接收到某个微服务实例的心跳,将会注销该实例;

6. 默认情况下,Server同时也是Client,多个Server实例互相之间通过复制的方式来实现服务注册表中数据的同步;

7. Client会缓存服务注册表中的信息;

8. 编写Server

在Maven工程中添加spring-cloud-starter-netflix-eureka-server依赖;若添加spring-boot-starter-security依赖,提供用户认证的能力;

在启动类上添加@EnableEurekaServer注解;

在配置文件中配置相关内容:

  eureka.client.registerWithEureka:表示是否将自己注册到Server,默认true;

  eureka.client.fetchRegistry:是否从Server获取注册信息,默认true;

  eureka.client.serviceUrl.defaultZone:与Server交互的地址;

9. 编写Client:

在Maven工程中添加spring-cloud-starter-netflix-eureka-client依赖;

在配置文件中配置相关内容:

  spring.application.name:指定注册到Server上的应用名称;

  eureka.instance.prefer-ip-address:为true则注册自己的IP到Server,否则注册所在操作系统的hostname;

若不想注册到Server,只需设置spring.cloud.service-registry.auto-registration.enabled = false;

10. Eureka的元数据

元数据有两种,分别是标准元数据和自定义元数据;

标准元数据指的是主机名,IP地址,端口号,状态页和健康检查等信息;

自定义元数据可以使用eureka.instance.metadata-map配置;

使用DiscoveryClient.getInstances(serverId),可查询指定微服务在Eureka上的实例列表;

11. Eureka的自我保护

默认情况下,如果Server在一定时间内没有接收到某个微服务实例的心跳,将注销该实例(默认为90s),如果在短时间内丢失过多客户端时,那么这个节点会进入自我保护模式,不再删除服务注册表中的数据,网络故障恢复后,自动退出自我保护模式;

可以使用eureka.server.enable-self-preservation = false,禁用自我保护模式;

12. Eureka的健康检查

应用状态的取值:UP,DOWN,OUT_OF_SERVICE,UNKNOWN等;只有标记为UP的微服务会被请求;

通过在application.yml中配置eureka.client.healthcheck.enabled = true,应用程序会将自己Spring Boot Actuator的/heath端点的健康状态传播到Eureka Server;