天天看點

SpringCloud【源碼分析】之EurakaServer

SpringCloud【源碼分析】之EurakaServer

圖檔來源https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance

從注解開始了解源碼

SpringCloud【源碼分析】之EurakaServer
SpringCloud【源碼分析】之EurakaServer

繼續跟進EurekaServerMarkerConfiguration.class 發現什麼都沒有做隻是執行了一下marker()

SpringCloud【源碼分析】之EurakaServer

@EnableEurekaServer 隻是做了這點事情,那麼猜測一定是在@SpringBootApplication 有相關操作,并且一定會有對marker()的處理 ,帶着這些疑問我們繼續看springbootApplication注解

SpringCloud【源碼分析】之EurakaServer

關鍵在于@EnableAutoConfiguration

@EnableAutoConfiguration 自動配置。既然是自動配置 那麼可以看下它都配置那些bean

最終繼續跟進注解@import相關的class資訊會找到AutoConfigurationImportSelector.class

這個類主要的功能是自動加載相關bean.

SpringCloud【源碼分析】之EurakaServer

此方法就會看到加載的bean資訊,我們本次需要關注EurekaServerAutoConfiguration就在其中,既然加載這個bean 就去看看這個bean都做些什麼事情。

SpringCloud【源碼分析】之EurakaServer

@ConditionalOnBean(Marker.class)  這個是表示隻有在spring容器

裡面含有Market這個執行個體的時候,才會加載目前這個Bean)也就是我們看到@EurekaServer注解裡的做marker()調用,通知開啟EurekaServer

SpringCloud【源碼分析】之EurakaServer

關注EurekaServerAutoConfigutation.class 會發現都是注入一些相關的bean 其中有一個eurekaServerBootstrap的注入

SpringCloud【源碼分析】之EurakaServer

繼續跟進eurekaServerBootsrtap都提供了那些方法

SpringCloud【源碼分析】之EurakaServer
SpringCloud【源碼分析】之EurakaServer

// 初始化Eureka的環境變量

  initEurekaEnvironment();

  // 初始化Eureka的上下文

   initEurekaServerContext();

SpringCloud【源碼分析】之EurakaServer

   // 從相鄰的eureka節點複制清單 這個是叢集處理同步通知

   int registryCount = this.registry.syncUp();

    // 開啟一個定時任務 用于管理服務清單

   this.registry.openForTraffic(this.applicationInfoManager, registryCount);

繼續跟進openfortraffic會找到PeerAwareInstanceRegistryImpl.class

SpringCloud【源碼分析】之EurakaServer
SpringCloud【源碼分析】之EurakaServer

 expectedNumberOfRenewsPerMin // 計算每分鐘最大續約數

numberOfRenewsPerMinThreshold//每分鐘最小續約數

發現調用postinit 這個方法主要是開啟定時每60秒更新下清單類别 逾時續約的剔除

SpringCloud【源碼分析】之EurakaServer

這個定時就是一個timertask來執行的 EvictionTask---evict()方法

SpringCloud【源碼分析】之EurakaServer
SpringCloud【源碼分析】之EurakaServer

通過看evict方法 其實報存 服務清單清單的是一個map資料

private final ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>> registry = new ConcurrentHashMap();
           

key 存儲服務的名字

value 存儲中繼資料

我們知道 EurekaServer 管理清單的實作了

EurekaServerAutoConfiguration初始化完成之後EurekaServerInitializerConfiguration.class的start方法來完成啟動

SpringCloud【源碼分析】之EurakaServer

到此 EurakaServer的管理清單清單的代碼分析完畢,叢集通知資料同步也在EurekaServerAutoConfiguration中 有興趣的可以自己看下 大緻原理一樣的

繼續閱讀