Eureka源码的自我理解

本文详细解析了Eureka服务注册与发现的工作原理,包括服务注册、续约、获取注册列表、服务下线及服务剔除流程。阐述了Eureka客户端如何通过心跳保持服务状态,以及如何处理注册列表信息的更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Register:服务注册
当Eureka客户端向Eureka Server注册时,它提供自身的元数据,比如IP地址、端口,运行状况指示符URL,主页等。

Renew:服务续约
Eureka客户会每隔30秒发送一次心跳来续约。 通过续约来告知Eureka Server该Eureka客户仍然存在,没有出现问题。 正常情况下,如果Eureka Server在90秒没有收到Eureka客户的续约,它会将实例从其注册表中删除。 建议不要更改续约间隔。

Fetch Registries:获取注册列表信息
Eureka客户端从服务器获取注册表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期(每30秒钟)更新一次。每次返回注册列表信息可能与Eureka客户端的缓存信息不同, Eureka客户端自动处理。如果由于某种原因导致注册列表信息不能及时匹配,Eureka客户端则会重新获取整个注册表信息。 Eureka服务器缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。Eureka客户端和Eureka 服务器可以使用JSON / XML格式进行通讯。在默认的情况下Eureka客户端使用压缩JSON格式来获取注册列表的信息。

Cancel:服务下线
Eureka客户端在程序关闭时向Eureka服务器发送取消请求。 发送请求后,该客户端实例信息将从服务器的实例注册表中删除。该下线请求不会自动完成,它需要调用以下内容:
DiscoveryManager.getInstance().shutdownComponent();

Eviction 服务剔除
在默认的情况下,当Eureka客户端连续90秒没有向Eureka服务器发送服务续约,即心跳,Eureka服务器会将该服务实例从服务注册列表删除,即服务剔除。

1.

里面的重点实现:

进入

super.selectImports(metadata);

List<String> factories = new ArrayList<>(new LinkedHashSet<>(SpringFactoriesLoader
      .loadFactoryNames(this.annotationClass, this.beanClassLoader)));

spring.factories文件:

注册的实现:

1.DiscoveryClient这个类中的initScheduledTasks() 初始化所有定时任务

获取注册表,new CacheRefreshThread()中的run()来刷新注册表

 

这段代码处理了注册的逻辑,开启了心跳的定时任务进行续租renew()方法

并初始化了InstanceInfoReplicator

这个类的run方法调用了discoveryClient.register()

在通过http请求向server进行注册,再去看server注册的处理

ApplicationResource这个类的addInstance()打上断点

当client进行注册时,PeerAwareInstanceRegistryImpl中的

1.调用注册 2.同步注册信息到其他节点

在AbstractInstanceRegistry类的register是注册的主逻辑,可以发现注册信息是由

ConcurrentHashMap<String, Lease<InstanceInfo>> gNewMap来保存的

InstanceResource这个类的

则是续租的接口

总结:DiscoveryClient这个类中的initScheduledTasks()开启定时的注册表刷新线程,心跳线程以及InstanceInfoReplicator这个类实现注册

服务端的InstanceResource和ApplicationResource来接受续租和注册请求,通过AbstractInstanceRegistry实现具体的逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值