Eureka源码(六)— 集群注册表同步
2022-05-10 10:19:47 2 举报
Eureka源码, 集群注册表同步
作者其他创作
大纲/内容
EurekaBootStrapcontextInitialized()
ApplicationResource的addInstance()方法先在本地完成一个注册,接着会replicateToPeers()方法,这个方法就会将这次注册请求,同步到其他所有的eureka server上去
isReplication,是否将该实例信息同步给其他Eureka Server
initEurekaServerContext()
注册操作
注册表从一台eureka server同步到另外一台eureka server上
eureka-core-jersey2的工程,JerseyReplicationClient
ApplicationResource的addInstance()方法,负责注册
然后 调用JerseyReplicationClient的父类AbstractJerseyEurekaHttpClient的register方法
开始
通过以前的peerurls减去当前的peerurls判断是否要更新peerEurekaNodes列表,以减少PeerEurekaNode的创建工作
client初始化的时候会调用DiscoveryClient的fetchRegistry方法拉取注册表放到本地
方法标注了@PostConstruct,Spring会再加载完该类后执行这个方法。
心跳 renew、取消cancel也同样类似,执行逻辑的最后都会调用replicateToPeers方法
replicateToPeers()方法
结束
此时同步注册请求给其他eureka server的时候,一定会将isReplication设置为true其他eureka server接到这个同步的请求,仅仅在自己本地执行,不会再次向其他的eureka server去进行注册(replicateToPeers()方法为处理逻辑,为true直接return,代码如下)
初始化PeerEurekaNodes
父类AbstractJerseyEurekaHttpClient的register方法中会调用子类的addExtraHeaders(resourceBuilder);方法里面将isReplication设置为true
刷新Eureka-Server 集群服务地址
在创建执行updatePeerEurekaNodes的定时任务之前,先执行一遍updatePeerEurekaNodes()方法,更新peer eureka nodes列表
resolvePeerUrls()
ApplicationResourceaddInstance()
eureka server自己本身本来就是个eureka client,在初始化的时候,就会去找任意的一个eureka server拉取注册表到自己本地来,作为自己这个eureka server的注册表EurekaBootStrap初始化 --> registry.syncUp() --> eurekaClient.getApplications() --> localRegionApps.get()localRegionApps结构如下:
如果是某台eureka client向eureka server进行注册,isReplication是false,此时会给其他所有配置的eureka server都同步这个注册请求此时一定会基于jersey,调用其他所有的eureka server的restful接口,去执行这个服务实例的注册的请求
serverContext.initialize()
updatePeerEurekaNodes()
默认每隔10分钟,运行任务,基于配置文件中的url来刷新eureka server列表。在定时任务之前,先执行一遍updatePeerEurekaNodes()方法,更新peer eureka nodes列表,之前要先执行这个方法,是因为定时任务执行的周期默认是10分钟,如果等定时调度来执行的话,太慢了
peerEurekaNodes.start()
把服务实例信息同步到其他eureka server上
创建执行updatePeerEurekaNodes的定时任务
拉取注册表放到本地
#replicateInstanceActionsToPeers同步实例到其他Eureka Server会运用Eureka 的三层队列批处理机制参考 eureka源码(七)— 三层队列任务批处理机制
isThisMyUrl(),判断peer url是否是当前节点的url。如果是,就剔除掉。
0 条评论
回复 删除
下一页