本文主要基於 Eureka 1.8.X 版本
-
1. 概述
-
2. 類圖
-
3. LookupService
-
4. LeaseManager
-
5. InstanceRegistry
-
6. AbstractInstanceRegistry
-
7. PeerAwareInstanceRegistry
-
8. PeerAwareInstanceRegistryImpl
-
666. 彩蛋
友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群討論技術和原始碼。
友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群討論技術和原始碼。
友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群討論技術和原始碼。
1. 概述
本文主要簡介 登錄檔 InstanceRegistry 的類關係,為後文的應用實體註冊發現、Eureka-Server 叢集複製做整體的鋪墊。
推薦 Spring Cloud 書籍:
-
請支援正版。下載盜版,等於主動編寫低階 BUG 。
-
程式猿DD —— 《Spring Cloud微服務實戰》
-
周立 —— 《Spring Cloud與Docker微服務架構實戰》
-
兩書齊買,京東包郵。
推薦 Spring Cloud 影片:
-
Java 微服務實踐 – Spring Boot
-
Java 微服務實踐 – Spring Cloud
-
Java 微服務實踐 – Spring Boot / Spring Cloud
2. 類圖
-
com.netflix.eureka.registry.AwsInstanceRegistry
,主要用於亞馬遜 AWS,跳過。 -
com.netflix.eureka.registry.RemoteRegionRegistry
,筆者暫時不太理解它的用途。目前猜測 Eureka-Server 叢集和叢集之間的註冊資訊的互動方式。查閱官方資料,《Add ability to retrieve instances from any remote region》 在做了簡單介紹。翻看目前網路上的部落格、書籍、專案實戰,暫時都沒提及此塊。估摸和亞馬遜 AWS 跨區域(region
) 機制有一定關係,先暫時跳過。有瞭解此塊的同學,麻煩告知下筆者,萬分感謝。TODO[0009]:RemoteRegionRegistry。 -
藍框部分,本文主角。
3. LookupService
com.netflix.discovery.shared.LookupService
,查詢服務介面,提供簡單單一的方式獲取應用集合(com.netflix.discovery.shared.Applications
) 和 應用實體資訊集合( com.netflix.appinfo.InstanceInfo
)。介面程式碼如下:
public interface LookupService<T> {
Application getApplication(String appName);
Applications getApplications();
List getInstancesById(String id) ;
InstanceInfo getNextServerFromEureka(String virtualHostname, boolean secure);
}
-
在 Eureka-Client 裡,EurekaClient 繼承該介面。
-
在 Eureka-Server 裡,
com.netflix.eureka.registry.InstanceRegistry
繼承該介面。
4. LeaseManager
com.netflix.eureka.lease.LeaseManager
,租約管理器介面,提供租約的註冊、續租、取消( 主動下線 )、過期( 過期下線 )。介面程式碼如下:
public interface LeaseManager<T> {
void register(T r, int leaseDuration, boolean isReplication);
boolean cancel(String appName, String id, boolean isReplication);
boolean renew(String appName, String id, boolean isReplication);
void evict();
}
5. InstanceRegistry
com.netflix.eureka.registry.InstanceRegistry
,應用實體登錄檔介面。它繼承了 LookupService 、LeaseManager 介面,提供應用實體的註冊與發現服務。另外,它結合實際業務場景,定義了更加豐富的介面方法。介面程式碼如下:
public interface InstanceRegistry extends LeaseManager<InstanceInfo>, LookupService<String> {
// ====== 開啟與關閉相關 ======
void openForTraffic(ApplicationInfoManager applicationInfoManager, int count);
void shutdown();
void clearRegistry();
// ====== 應用實體狀態變更相關 ======
void storeOverriddenStatusIfRequired(String appName, String id, InstanceStatus overriddenStatus);
boolean statusUpdate(String appName, String id, InstanceStatus newStatus,
String lastDirtyTimestamp, boolean isReplication);
boolean deleteStatusOverride(String appName, String id, InstanceStatus newStatus,
String lastDirtyTimestamp, boolean isReplication);
Map overriddenInstanceStatusesSnapshot() ;
// ====== 響應快取相關 ======
void initializedResponseCache();
ResponseCache getResponseCache();
// ====== 自我保護樣式相關 ======
long getNumOfRenewsInLastMin();
int getNumOfRenewsPerMinThreshold();
int isBelowRenewThresold();
boolean isSelfPreservationModeEnabled();
public boolean isLeaseExpirationEnabled();
// ====== 除錯/監控相關 ======
List> getLastNRegisteredInstances();
List> getLastNCanceledInstances();
}
6. AbstractInstanceRegistry
com.netflix.eureka.registry.AbstractInstanceRegistry
,應用物件登錄檔抽象實現。
這裡先不拓展開,《Eureka 原始碼解析 —— 應用實體註冊發現》系列 逐篇分享。
7. PeerAwareInstanceRegistry
com.netflix.eureka.registry.PeerAwareInstanceRegistry
,PeerAware ( 暫時找不到合適的翻譯 ) 應用物件登錄檔介面,提供 Eureka-Server 叢集內註冊資訊的同步服務。介面程式碼如下:
public interface PeerAwareInstanceRegistry extends InstanceRegistry {
void init(PeerEurekaNodes peerEurekaNodes) throws Exception;
int syncUp();
boolean shouldAllowAccess(boolean remoteRegionRequired);
void register(InstanceInfo info, boolean isReplication);
void statusUpdate(final String asgName, final ASGResource.ASGStatus newStatus, final boolean isReplication);
}
8. PeerAwareInstanceRegistryImpl
com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl
,PeerAware ( 暫時找不到合適的翻譯 ) 應用物件登錄檔實現類。
這裡先不拓展開,《Eureka 原始碼解析 —— Eureka-Server 叢集》系列 逐篇分享。
666. 彩蛋
本文是一篇簡介( 啪啪啪,打臉 ),如果胖友比較著急想瞭解原理,可以閱讀 攜程 ——《深度剖析服務發現元件Netflix Eureka》 先,寫的非常非常非常不錯。
快馬加鞭,更新 《Eureka 原始碼解析 —— 應用實體註冊發現 (一)之註冊》 ing …
胖友,分享我的公眾號( 芋道原始碼 ) 給你的胖友可好?