Eureka 是基于REST,用于服务管理,其客户端实现了负载均衡功能。Eureka维护服务的注册列表以及检查这些服务状态(通过心跳)。
一、架构图
1、Eureka服务器把服务注册信息保存在内存的注册中心里面,并通过客户端的心跳来其最新状态
2、Eureka客户端通过服务发现功能,去获取服务器中的注册列表,并保存到本地缓存。因此并不需要每次都去服务器获取服务注册信息,提升性能。
3、服务提供者,是客户端的一种角色,主要的工作:
向服务器注册服务(发送主机、端口、健康检测连接等信息)
发送心跳给服务器
向服务器获取注册列表
4、服务调用者,对发布到服务器的服务进行查找和调用,其他功能和服务提供者类似。
二、实现要点
1、服务器
a、在pom.xml中引入:spring-cloud-starter-eureka-server依赖。
b、启动类中加入@EnableEurekaServer
c、在yaml文件中设置端口,并把注册自身给去掉。eureka.client.registerWithEureka和eureka.client.fetchRegistry设置为false
2、服务提供者
a、在pom.xml中引入spring-cloud-starter-eureka依赖。
b、yml文件中设定应用名称、设置服务器的地址信息等
c、启动类中加入@EnableEurekaClient
3、服务调用者
a、在pom.xml中引入spring-cloud-starter-eureka、spring-cloud-starter-ribbon等依赖。
b、yaml文件中设定应用名称、端口、服务器的地址信息等
c、启动类中加入@EnableEurekaClient(包含了@EnableDiscoveryClient,用于去Eureka中发现服务)
d、服务调用类中,加入@LoadBalanced用于让RestTemplate具备访问分布式服务的能力。
三、Eureka集群
1、服务端
两个服务端分别向对方进行注册。启动时会报错,提醒需要向自身注册,此异常可以忽视。
2、服务提供方
需要向所有服务器注册
3、服务调用者
需要向所有服务器注册,并根据获取到的服务信息,调用服务。
四、常用配置说明
1、心跳检测
心跳机制:Eureka内部实现了,客户端实例默认每隔30秒向服务端发送心跳,默认90秒内没收到客户端实例的心跳,则把该实例从注册表中删除。而这个清除的操作由一个定时器执行,默认情况下60秒执行一次。
客户端发送心跳的时隔调整:eureka.instance.leaseRenewalIntervalInSeconds=5(默认是30,单位是秒)
服务端定时器执行间隔调整:eureka.server.eviction-interval-timer-in-ms=30000(默认是60秒,单位是毫秒)
上次接收到心跳到下次接收到心跳的超时时间:eureka.instance.leaseExpirationDurationInSeconds =15(默认是90,单位是秒),这个值建议设置大于leaseRenewalIntervalInSeconds。
定时器需要在服务端的自我保护模式关闭时才会执行清除。
2、注册表抓取时隔
机制:客户端默认周期性地30秒向服务端抓取注册表中可用的服务列表信息,并把抓取结果更新到本地缓存。
eureka.client.registry-fetch-interval-seconds=3(默认30,单位秒)
3、自我保护模式
机制:当客户端的心跳失败率超过一定比例,服务就会被保护起来,不会被马上从注册表中删除。
eureka.server.enable-self-preservation=false(默认true,开启)