参考视频
1.Eureka概述
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。
Eureka包含两个组件:Eureka Server和Eureka Client。
简言之,Eureka是能实现注册中心功能的一套编程规则。
- 使用Eureka Server(本身是一个服务)作为注册中心;
- 其余所有服务(调用者、发现者)都必须内置Eureka Client以实现对注册中心进行通信。
2.Eureka工作流程
服务调用者借助注册中心访问服务提供者时,整体的工作流程如下:
- [启动注册中心] 注册中心(本身是一个组件,也就是一个项目)启动;
- [注册服务] 服务提供者A启动,将服务的各类信息登记到注册中心。此时服务A已被发现,且可被调用;
- [健康检查] 服务提供者会定期向注册中心发送"心跳“。若某个服务已经很长一段时间都未发送”心跳",注册中心就会认为该服务已宕机,服务将被注销;
- [调用服务] 服务调用者从注册中心获取所有的服务,并从中找到指定的服务地址,完成对服务提供者的访问;
![]()
Eureka完全实现了注册中心的各个工作步骤。
2.1.服务注册
- 服务提供者启动时,通过Eureka Client将自己的服务信息(服务名、网络地址等)注册到Eureka Server;
- Eureka Server将注册信息保存在内存当中;
- 服务提供者通过Eureka Client每隔30s向Eureka Server发送心跳。而Eureka Server则检测服务的健康状态,若某服务不再心跳,就从内存中将该服务注销。
2.2.服务发现
- 服务调用者通过Eureka Client从Eureka Server的内存中拉取注册信息,并存储在自己的内存中;
- 首次从Eureka Server拉取信息时,会拉取其所有的注册信息;
- 每隔30s,服务调用者会再次从Eureka Server拉取增量信息(服务的注册、注销等)。
由于间隔的存在,有可能会出现:增量注册信息尚未及时被更新到调用者的内存中,提供者便已宕机。此时若发起调用便会失败。
2.3.服务调用
先前,服务调用者借助Eureka Client从Eureka Server中拉取了注册信息,并存储在了内存中。此后服务调用者便可以根据内存中的注册信息,对服务提供者发起调用。
上面提到,调用者拉取注册信息存在30s的间隔,这导致注册信息的更新并非是实时的,就可能会调用到宕机的服务。