SHAPE \* MERGEFORMAT 通过流程图我们可以很清晰的看到在服务提供者向Eureka-server是通过注册 续约 下线3部分。下面就针对这3部分看下源码
通过根据EnableDiscoveryClient注解 很容易找到DiscoveryClient是我们今天的主要战场。
观察下DiscoveryClient.class下的方法
其中有几个4个内部类 和几个主要方法
DiscoveryClient () 初始化信息
CacheRefreshThread 缓存刷新类
HeartbeatThread 心跳线程 用于注册 续约下线等定时任务的管理
DiscoveryClientOptionalArgs和EurekaTransport是用于通信的http方式 jersay架构完成。
关注的主要方法
InitScheduledTasks() //开启缓存刷新任务 心跳定时任务 instahce状态监听
cancelScheduledTasks()//刷新缓存任务
register() //注册
renew() //更新
类初始化的时候会走这个2个方法
通过feechRegistry()获取EurekaServer相关数据初始化DiscoveryClient类。
初始化完成调用initScheduledTasks()开启定时任务
是否注册Eureka 在配置文件可配置 默认开启
关注this.scheduler.schedule()方法 可以看到执行的是
看到这里我们就可以对续约有一个认识了 是通过initschedulerTasks时创建了
一个心跳定时任务(TimedSupervisorTask)30秒发送一次http(jerSay架构)请求到Eurekaserver 通知我还活着。
下面关注InstanceInfoReplicator类
开启一个定时任务40秒执行一次
监听事件调用的方法
Run()刷新 去注册自己的服务。需要注意的是第一自动注册并不是调用的本方法来执行注册的。
ApplicationResource.class 注册
开始是请求参数的校验,最终调用registry()方法 最终又回到它的实现类peerAwareInstanceRegistyimpl#register()上
调用父类的注册,同时通知其他节点
AbstractInstanceRegistry.class
先看map里是否有这个实例信息 没有创建一个新的 再次对比 赋值更新操作时间戳
更新也是同理 在
PeerAwareInstanceRegistryImpl.class renew()方法中 有兴趣的可以自行翻阅下