eureka源码解析

当service从注册列表中移除时调用方法com.netflix.discovery.DiscoveryClient#shutdown

eureka源码解析

DiscoveryClient有一个register方法,用来向eureka服务注册服务实例

eureka源码解析

DiscoveryClient的register方法其实是被InstanceInfoReplicator中的run方法调用

eureka源码解析

而类InstanceInfoReplicator是在DiscoveryClient中的方法initScheduledTasks初始化

eureka源码解析

方法com.netflix.eureka.EurekaBootStrap#initEurekaServerContext初始化了eureka中相关的信息

eureka源码解析

类PeerAwareInstanceRegistryImpl的register方法中的replicateToPeers就是同步注册列表信息到其它eureka节点

eureka源码解析
eureka源码解析

方法com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl#register是服务注册功能,它能被服务通过restful api调用,被com.netflix.eureka.resources.ApplicationResource#addInstance方法调用

eureka源码解析

DiscoveryClient的renew方法是服务续约,默认是30s一次

eureka源码解析

新的服务实例注册后为什么会那么久才会被其它被调用方发现??

在方法com.netflix.discovery.DefaultEurekaClientConfig#getInitialInstanceInfoReplicationIntervalSeconds发现同步到集群其它节点要在40s后
eureka源码解析

而且看下图,eureka依赖多级缓存保存注册列表的读取速度,缓存之间要30s才刷新一次,eureka client也是30s才去eureka server集群中拉取信息。所以新的服务实例注册后要>=40s才能被其它服务实例发现。当然如果eureka集群中只有一台实例,不用等40s同步信息到集群其它节点,理想环境下>=0s,即能立刻被发现该新实例

eureka源码解析

相关文章: