本文優點:按着步驟操作可以串起來
註冊中心分兩部分,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代碼分析
略