1、和consul、zookeeper类似,eureka是用于服务注册和发现的组件。
2、eureka分为eureka server服务注册中心和eureka client客户端。
3、springcloud中,consul、zookeeper和eureka都可以作为服务注册和发现的组件,为什么选择eureka呢?
eureka是完全开源的,是netflix公司的开源产品,经过不断迭代和生产环境的考验,在功能、想和性能上都非常稳定。
可以跟其他springcloud组件无缝对接。
4、eureka主要包括3种角色
register service:服务注册中心 -eureka server
provider service:服务提供者 -eureka client
consumer service:服务消费者 -eureka client
服务消费基本过程:首先需要一个服务注册中心eurek server,服务提供者eureka client 向服务注册中心eureka server注册,将自己的信息(服务名、服务ip和端口等)通过Rest Api方式提交给服务注册中心eureka server。同样,服务消费者eureka client也向注册中心注册,同时服务消费者获取一份服务注册列表的信息,该列表包含了所有向服务注册中心注册的服务信息。获取服务注册列表信息后,服务消费者就知道服务提供者的ip地址,可通风富哦http远程调度来消费服务提供者的服务。
5、eureka源码分析
eureka有如下5个概念:
(1)register 服务注册 当eureka client向eureka server注册时,eureka client会提供自身的元数据,如:ip地址、端口、运行状况指标的url、主页地址等信息。
(2)renew 服务续约 默认情况下eureka client会每个30秒向eureka server发送一次心跳来进行服务续约,告诉eureka server该eureka client目前仍可用、没有出现故障。正常情况下,如eureka server在90秒内没有收到eureka client的心跳,eureka server会将eureka client实力从注册列表中删除。(不建议修改服务续约的间隔时间)
(3)fetch registries 获取服务注册列表信息 eureka client从eureka server获取服务注册列表信息,并将其缓存在本地。eureka client会使用服务注册列表信息查找其他服务信息,从未进行远程调用。该注册列表信息定时(每隔30秒)更新一次,每次返回注册列表信息可能与eureka client的缓存信息不同,eureka client会自己处理这些信息。如果由于某种原因导致注册列表信息不能及时匹配,eureka client会重新获取整个注册列表信息。eureka server缓存了所有服务注册列表信息,并将整个注册列表以及每个应用程序的信息进行压缩,压缩内容和没有压缩的内容完全相同。eureka client和eureka server可使用json和xml数据格式进行通信。默认是用json。
(4)cancel 服务下线 eureka client在程序关闭时可向eureka server发送下线请求。发送请求后,该客户的实例信息将从eureka server的服务注册列表中删除。该下线请求不会自动完成,需要程序关闭时调用代码:DiscoveryManager.getInstance().shutdownComponent();
(5)eviction 服务剔除 默认情况下,当eureka client连续90秒内没有向eureka server发送心跳,eureka server会将该服务实例从服务注册列表删除,也就是服务删除。