簡單梳理下eureka註冊中心代碼

本文優點:按着步驟操作可以串起來

註冊中心分兩部分,eureka-server和eureka-client

一.概述:

1.eureka-server:主要維護了eureka-client的服務地址信息,用的雙層map,然後其實就是提供了對這個map的增刪查改接口,如:註冊(添加),獲取服務(查詢),續約(更新過期時間),剔除(刪除),同步(初始全量獲取,新註冊剔除會同步),並加了兩級緩存,同步和剔除起了兩個任務

2.eureka-client:主要就是服務註冊,獲取任務(全量,增量),續約任務

二.eureka-server代碼梳理

1.找到eureka-server的pom依賴

<dependencies>
    <!--Eureka 服務註冊中心 start-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <!--Eureka 服務註冊中心 end-->
</dependencies>

2.點擊spring-cloud-starter-netflix-eureka-server,找到如下依賴

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-netflix-eureka-server</artifactId>
</dependency>

3.搜索spring-cloud-netflix-eureka-server,並點進去

4.找到包下的spring.factories,找到EnableAutoConfiguration下的EurekaServerAutoConfiguration,並點擊進去,這個類是eureka-server的自動裝載類,下邊分析這個類怎麼被加載的

PS:需要了解點spring boot自動裝載知識

5.找到spring boot啓動類,點擊@SpringBootApplication註解

6.找到@EnableAutoConfiguration註解,並點擊

7.找到如下@Import({AutoConfigurationImportSelector.class}),點擊類

8.AutoConfigurationImportSelector類實現了ImportSelector接口,這個接口就是手動注入bean的接口

PS:這裏需要了解spring前置知識

下邊的圖1是AutoConfigurationImportSelector類圖

 

點擊紅框方法進去,這裏掃描了META-INF下的spring.factories,這裏便掃描了步驟4的內容

selectImport方法是在refresh的invokeBeanFactoryPostProcessors中調用的,如下:

9.進入EurekaServerAutoConfiguration類,@ConditonalOnBean就是後邊的Marker類存在則加載本類,進入程序啓動類,點擊@EnableEurekaServer註解,這裏加載了Marker類,所以這個註解是開啓eureka-server.

進入程序啓動類,點擊@EnableEurekaServer

點擊EurekaServerMarkerConfiguration

如下類注入了Marker,則激活了EurekaServerAutoConfiguration類(eureka-server自動裝配類)

10.進入EurekaServerAutoConfiguration類

找到eurekaServerBootstrap方法,然後搜索PeerAwareInstanceRegistry注入的地方

11.找到PeerAwareInstanceRegistry,點擊new InstanceRegistry方法,一直點super方法,最終定位到AbstractInstanceRegistry類,這個類中提供了註冊,續約,服務獲取,剔除等方法,如下圖

12.服務同步和剔除任務則在如下Import的紅框類中,這個類實現了SmartLifecycle接口,則在bean裝載並初始化完後執行start方法

下圖中sysup是服務同步方法,this.registry.openForTraffic方法則是啓動剔除服務

三.eureka-client代碼分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章