Eureka Server:服务注册服务器,也称服务注册中心,各个服务启动后会在Eureka Server中进行注册,Eureka Server的服务注册表会储存所有的可用服务节点的信息。
Eureka Client:服务实例Eureka Client内置有轮询负载均衡器,服务启动后Eureka Client将会向Eureka Server发送心跳服务。
Eureka组件工作原理
Eureka Client注册Eureka Server,Eureka Client中的服务是通过REST调用的。Eureka服务还具有缓存功能,它能够从Eureka Servler查询当前注册的服务信息并缓存本地。
服务提供者:Eureka Client启动之后服务提供者,会通过REST请求将自己注册在Eureka Server中,并维护一个心跳进行服务续约,防止Eureka Server讲服务从服务列表中剔除。
服务消费者:用于获取Eureka Server注册的服务清单,并且该服务清单默认隔离30秒更新一次,服务消费者获取消费清单后,能够根据自己的需求决定调用那个服务,默认采用轮询方式调用,从而实现Eureka Client的负载均衡。
服务提供者和服务消费者是可以相互转换的,一个服务既可能是服务消费者,也有可能是服务提供者。
(1)创建一个名称为Eureka的Spring Boot项目,添加Eureka Serve依赖。
在pom.xml中添加
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
(2)修改全局配置文件application.properties的后缀名为yml。向其添加Eureka的配置信息。
server:
port: 7000 #服务器端口号
spring:
application:
name:eureka-server # 端口号名称配置
eureka:
client:
fetch-registry: false #表示是否向EurekaServer注册
register-with-eureka: false #表示是否从EurekaServer获取注册信息
service-url:
default-zone:
http://${eureka.instance.hostname}:${server.port}/eureka/
instance:
hostname: localhost
(3)在启动类中天剑@EnableEurekaServer注解启动器。
(4)启动服务,访问http://localhost:7000

(1)创建一个名车文eureka-provider的SpringBoot项目,添加Web、EurekaClient依赖。
(2)将全局配置文件application.properties改为application.yml,添加配置信息
server:
port: 7006 # 指定该provider的端口号
spring:
application: #指定应用名称
name: eureka-provider
eureka:
client:
service-url:
defaultZone: http://localhost:7000/eureka/
instance:
hostname: localhost
(3)在启动类上添加@EnableEurekaServer,启动服务
会出现

访问http://localhost:7000/

(1)创建一个名车文eureka-consumer的SpringBoot项目,添加Web、EurekaClient依赖。
(2)将全局配置文件application.properties改为application.yml,添加配置信息
server:
port: 7002 #指定该Eureka的端口号
spring:
application:
name: eureka-consumer #用于设置服务的名字
eureka:
instance:
prefer-ip-address: true #用于设置是否显示主机的IP
client:
service-url:
defaultZone: http://localhost:7000/eureka/
(3)在启动类上添加@EnableEurekaClient注解,开启Eureka Client功能,启动服务
访问http://localhost:7000/

(1)先修改C:\Windows\System32\drivers\etc下的hosts文件,增加以下代码
127.0.0.1 server1
127.0.0.1 server2
(2)改造Eureka Server,先修改之前的Eureka Server的全局变量
server:
port: 7000 #服务器端口号
spring:
application:
name: eureka-server # 端口号名称配置
eureka:
client:
fetch-registry: false #表示是否向EurekaServer注册
register-with-eureka: false #表示是否从EurekaServer获取注册信息
service-url:
defaultZone:
http://server2:7009/eureka/
instance:
hostname: server1
(3)创建一个新的Eureka Server搭建一个eureka-server-another,的Eureka Server,全局变量的值为:
server:
port: 7009 #服务器端口号
spring:
application:
name: eureka-server2 # 端口号名称配置
eureka:
client:
service-url:
defaultZone:
http://server1:7000/eureka/
instance:
hostname: server2
(4)创建一个新的服务器提供者的方式,搭建一个名为eureka-provider-another的服务提供者,全局变量的值为
server:
port: 7007 # 指定该provider的端口号
spring:
application: #指定应用名称
name: eureka-provider
eureka:
client:
service-url:
defaultZone: http://localhost:7000/eureka/
instance:
hostname: localhost
(5)改造服务消费者,更改全局变量
server:
port: 7002 #指定该Eureka的端口号
spring:
application:
name: eureka-consumer #用于设置服务的名字
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://server1:7000/eureka/,http://server2:7009/eureka/
(6)启动Eureka高可用服务器,依次启动Eureka Server、两个服务提供者、一个服务消费者,访问http://localhost:7000/,http://localhost:7009/


Eureka是通过信条的方式实现对各个服务实例的健康检测,心跳机制可以有效检查客户端进程是否正常运行。
设置Eureka Client心跳默认时间代码如下:
eureka:
instance:
lease-renewal-interval-in-seconds:5 #心跳默认为5秒
EurekaServer如果一定期限内没有接收到Eureka Client的实例心跳,就会从注册中心剔除掉,去他客户端也无法访问这个实例,这个期限默认为90秒
具体代码如下:
eureka:
instance:
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 10 #设置每隔10秒刷新列表
当Eureka注册中心出现故障时Eureka Client服务有可能无法正常续约,造成误杀的可能。自我保护机制就是为了防止误杀的情况。
Eureka Server通过判断是否存在大量续约失败服务,从而确定是否进行自我保护,Eureka Server默认的自我保护阙值是0.85,如果Eureka Server心跳比例接收到的服务续约数低于阙值,就会采取自我保护,不再剔除注册列表的信息。
默认情况下自我保护是开启的,关闭的代码如下:
eureka:
server:
enable-self-preservation: false
服务注册相关的配置信息:
| 参数名称 | 参数说明 |
|---|---|
| enable | 启动Eureka客户端,默认值为true |
| registryFetchInterval | Second从Eureka服务器端获取注册信息的间隔时间,单位为妙,默认为30 |
| fetchRegistry | 是否从Eureka服务端获取注册信息,默认为false |
| eurekaServerRead | 读取Eureka Server信息的超时时间,单位为秒,默认值为8 |
| initialInstanceInfoReolicationInstervalSeconds | 初始化实力信息到Eureka服务端的间隔时间,单位为秒,默认值40 |
| instanceInfoReolicationInstervalSeconds | 更新实例信息的变化Eureka服务端的间隔时间,单位为秒,默认值为30 |
实例服务相关的配置信息
| 参数名称 | 参数说明 |
|---|---|
| preferIpAddress | 是否有限使用IP地址作为主机名的标识,默认值false |
| leaseRenewalIntervalSeconds | Eureka客户端向服务端发送心跳的时间间隔,单位为秒。默认为30 |
| leaseExpirationDurationInSeconds | Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,默认为90 |
| appname | 服务名,默认取spring.application,name的配置值。 |
| hostname | 主机名。不配置时,需要将根据操作系统的主机名来获取。 |