一. 简介
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;