spring cloud源码解读(1)-eureka-client

以下划出来的都是重要运行路线:

1.首先找到项目中对应的jar包,以及spi中的org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration
spring cloud源码解读(1)-eureka-client
2.找到org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration.RefreshableEurekaClientConfiguration#eurekaClient方法中(启动项目时会调用此CloudEurekaClient类,进入构造方法):
spring cloud源码解读(1)-eureka-client
3.上面的会调到此类构造方法中:com.netflix.discovery.DiscoveryClient#DiscoveryClient(com.netflix.appinfo.ApplicationInfoManager, com.netflix.discovery.EurekaClientConfig, com.netflix.discovery.AbstractDiscoveryClientOptionalArgs, javax.inject.Provider<com.netflix.discovery.BackupRegistry>, com.netflix.discovery.shared.resolver.EndpointRandomizer)
上面方法中会在此初始化几个定时器,分别是拉取/心跳/注册:
spring cloud源码解读(1)-eureka-client

拉取

4.还是在上面的方法中此步会首次拉取其它在eureka server中注册的服务列表:
spring cloud源码解读(1)-eureka-client
5.进入上面的拉取方法(下面定时任务时走的是同一个方法,只是走的增量更新)com.netflix.discovery.DiscoveryClient#fetchRegistry:
spring cloud源码解读(1)-eureka-client
6.调用:com.netflix.discovery.DiscoveryClient#getAndStoreFullRegistry方法中标红是请求eureka server拉取已经注册的服务列表,记住此处http (请求地址都是/eureka/apps) 是GET:(后面会讲eureka server的源码中会讲此请求会调到对应的处理方法中)
spring cloud源码解读(1)-eureka-client
7.回到上面各种调用完毕后,回到com.netflix.discovery.DiscoveryClient#refreshRegistry方法中:
spring cloud源码解读(1)-eureka-client

注册:

8.回到方法com.netflix.discovery.DiscoveryClient#DiscoveryClient(com.netflix.appinfo.ApplicationInfoManager, com.netflix.discovery.EurekaClientConfig, com.netflix.discovery.AbstractDiscoveryClientOptionalArgs, javax.inject.Provider<com.netflix.discovery.BackupRegistry>, com.netflix.discovery.shared.resolver.EndpointRandomizer):初始化定时器进入此方法:
spring cloud源码解读(1)-eureka-client
9.来到com.netflix.discovery.DiscoveryClient#initScheduledTasks方法中,这里是心跳及注册的代码,第一个定时器是拉取注册服务列表:
spring cloud源码解读(1)-eureka-client
9。首次进来会进入注册com.netflix.discovery.DiscoveryClient#renew:
spring cloud源码解读(1)-eureka-client
10.注册最终会调到com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient#register这里调用eureka server方法,记住此处http(请求地址都是/eureka/apps/服务名)是POST:
spring cloud源码解读(1)-eureka-client

心跳

11.当注册完毕后,下次再进入此com.netflix.discovery.DiscoveryClient#renew方法时不会再进注册了会调到心中方法中com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient#sendHeartBeat方法请求eureka server完成心跳通知,记住此处http(请求地址都是/eureka/apps/服务名/ip:服务名:端口?status=up&lastDirtyTimestapm=时间截)请求为PUT:
spring cloud源码解读(1)-eureka-client
以上就是eureka-client完成与eureka server之间维持关系的主要代码。