SpringCloud【源码分析】之Euraka-Client

SpringCloud【源码分析】之Euraka-Client_第1张图片

​​ SHAPE  \* MERGEFORMAT ​通过流程图我们可以很清晰的看到在服务提供者向Eureka-server是通过注册 续约 下线3部分。下面就针对这3部分看下源码

通过根据EnableDiscoveryClient注解 很容易找到DiscoveryClient是我们今天的主要战场。

观察下DiscoveryClient.class下的方法

SpringCloud【源码分析】之Euraka-Client_第2张图片

SpringCloud【源码分析】之Euraka-Client_第3张图片

其中有几个4个内部类 和几个主要方法

DiscoveryClient () 初始化信息

CacheRefreshThread 缓存刷新类

HeartbeatThread  心跳线程 用于注册 续约下线等定时任务的管理

DiscoveryClientOptionalArgs和EurekaTransport是用于通信的http方式 jersay架构完成。

关注的主要方法

InitScheduledTasks() //开启缓存刷新任务 心跳定时任务 instahce状态监听

cancelScheduledTasks()//刷新缓存任务

register() //注册

renew() //更新

类初始化的时候会走这个2个方法

SpringCloud【源码分析】之Euraka-Client_第4张图片

SpringCloud【源码分析】之Euraka-Client_第5张图片通过feechRegistry()获取EurekaServer相关数据初始化DiscoveryClient类。

初始化完成调用initScheduledTasks()开启定时任务

SpringCloud【源码分析】之Euraka-Client_第6张图片

 

是否注册Eureka 在配置文件可配置 默认开启

续约

关注this.scheduler.schedule()方法 可以看到执行的是

 

SpringCloud【源码分析】之Euraka-Client_第7张图片

 

SpringCloud【源码分析】之Euraka-Client_第8张图片

SpringCloud【源码分析】之Euraka-Client_第9张图片

 

看到这里我们就可以对续约有一个认识了 是通过initschedulerTasks时创建了

一个心跳定时任务(TimedSupervisorTask)30秒发送一次http(jerSay架构)请求到Eurekaserver 通知我还活着。

注册

下面关注InstanceInfoReplicator类

SpringCloud【源码分析】之Euraka-Client_第10张图片

开启一个定时任务40秒执行一次

SpringCloud【源码分析】之Euraka-Client_第11张图片

监听事件调用的方法

SpringCloud【源码分析】之Euraka-Client_第12张图片

Run()刷新 去注册自己的服务。需要注意的是第一自动注册并不是调用的本方法来执行注册的。

EurekaServer 接收client的 注册和更新 处理源码分析

ApplicationResource.class 注册

SpringCloud【源码分析】之Euraka-Client_第13张图片


开始是请求参数的校验,最终调用registry()方法 最终又回到它的实现类peerAwareInstanceRegistyimpl#register()上

SpringCloud【源码分析】之Euraka-Client_第14张图片

调用父类的注册,同时通知其他节点

AbstractInstanceRegistry.class

SpringCloud【源码分析】之Euraka-Client_第15张图片

先看map里是否有这个实例信息 没有创建一个新的 再次对比 赋值更新操作时间戳

更新也是同理 在

PeerAwareInstanceRegistryImpl.class renew()方法中 有兴趣的可以自行翻阅下

 

你可能感兴趣的:(springboot,springcloud,Eureka,springcloud源码分析)