摘要: 原創出處 http://www.iocoder.cn/Eureka/eureka-server-init-first/ 「芋道源碼」歡迎轉載,保留摘要,謝謝!
本文主要基於 Eureka 1.8.X 版本
- 1. 概述
- 2. EurekaServerConfig
- 【本文】ServerConfig
- EurekaBootStrap
- 請支持正版。下載盜版,等於主動編寫低級 BUG 。
- 程序猿DD —— 《Spring Cloud微服務實戰》
- 周立 —— 《Spring Cloud與Docker微服務架構實戰》
- 兩書齊買,京東包郵。
- 請求認證相關
- Eureka-Server 未實現認證。在 Spring-Cloud-Eureka-Server,通過
spring-boot-starter-security
模塊支持。《spring cloud-給Eureka Server加上安全的用戶認證》有詳細解析。 #shouldLogIdentityHeaders()
:打印訪問的客戶端名和版本號,配合 Netflix Servo 實現監控信息採集。
- Eureka-Server 未實現認證。在 Spring-Cloud-Eureka-Server,通過
- 請求限流相關
- 《Eureka 源碼解析 —— 基於令牌桶算法的 RateLimiter》 有詳細解析。
#isRateLimiterEnabled()
:請求限流是否開啓。#isRateLimiterThrottleStandardClients()
:是否對標準客戶端判斷是否限流。標準客戶端通過請求頭(header
)的"DiscoveryIdentity-Name"
來判斷,是否在標準客戶端名集合裏。#getRateLimiterPrivilegedClients()
:標準客戶端名集合。默認包含"DefaultClient"
和"DefaultServer"
。#getRateLimiterBurstSize()
:速率限制的 burst size ,使用令牌桶算法。#getRateLimiterRegistryFetchAverageRate()
:增量拉取註冊信息的速率限制。#getRateLimiterFullFetchAverageRate()
:全量拉取註冊信息的速率限制。
獲取註冊信息請求相關
- 《Eureka 源碼解析 —— 應用實例註冊發現 (六)之全量獲取》 有詳細解析。
- 《Eureka 源碼解析 —— 應用實例註冊發現 (七)之增量獲取》 有詳細解析。
#shouldUseReadOnlyResponseCache()
:是否開啓只讀請求響應緩存。響應緩存 ( ResponseCache ) 機制目前使用兩層緩存策略。優先讀取只讀緩存,讀取不到後讀取固定過期的讀寫緩存。#getResponseCacheUpdateIntervalMs()
:只讀緩存更新頻率,單位:毫秒。只讀緩存定時更新任務只更新讀取過請求 (com.netflix.eureka.registry.Key
),因此雖然永不過期,也會存在讀取不到的情況。#getResponseCacheAutoExpirationInSeconds()
:讀寫緩存寫入後過期時間,單位:秒。#getRetentionTimeInMSInDeltaQueue()
:租約變更記錄過期時長,單位:毫秒。默認值 : 3 60 1000 毫秒。#DeltaRetentionTimerIntervalInMs()
:移除隊列裏過期的租約變更記錄的定時任務執行頻率,單位:毫秒。默認值 :30 * 1000 毫秒。
自我保護機制相關
- 在 《Eureka 源碼解析 —— 應用實例註冊發現(四)之自我保護機制》 有詳細解析。
#shouldEnableSelfPreservation()
:是否開啓自我保護模式。FROM 周立——《理解Eureka的自我保護模式》
當Eureka Server節點在短時間內丟失過多客戶端時(可能發生了網絡分區故障),那麼這個節點就會進入自我保護模式。
一旦進入該模式,Eureka Server就會保護服務註冊表中的信息,不再刪除服務註冊表中的數據(也就是不會註銷任何微服務)。
當網絡故障恢復後,該Eureka Server節點會自動退出自我保護模式。#getRenewalPercentThreshold()
:開啓自我保護模式比例,超過該比例後開啓自我保護模式。#getRenewalThresholdUpdateIntervalMs()
:自我保護模式比例更新定時任務執行頻率,單位:毫秒。
註冊的應用實例的租約過期相關
在 《Eureka 源碼解析 —— 應用實例註冊發現(五)之過期》 有詳細解析。
#getEvictionIntervalTimerInMs()
:租約過期定時任務執行頻率,單位:毫秒。
- Eureka-Server 遠程節點( 非集羣 )讀取相關
- TODO[0009]:RemoteRegionRegistry
#getRemoteRegionUrlsWithName()
:TODO[0009]:RemoteRegionRegistry。key
:Eureka-Server 區域(region
)value
:Eureka-Server 地址
#getRemoteRegionAppWhitelist()
:TODO[0009]:RemoteRegionRegistry。#getRemoteRegionRegistryFetchInterval()
:TODO[0009]:RemoteRegionRegistry。#getRegistrySyncRetries()
:Eureka-Server 啓動時,從遠程 Eureka-Server 讀取失敗重試次數。#getRegistrySyncRetryWaitMs()
:Eureka-Server 啓動時,從遠程 Eureka-Server 讀取失敗等待(sleep
)間隔,單位:毫秒。#getRemoteRegionFetchThreadPoolSize()
:TODO[0009]:RemoteRegionRegistry。#disableTransparentFallbackToOtherRegion()
:是否禁用本地讀取不到註冊信息,從遠程 Eureka-Server 讀取。
- Eureka-Server 集羣同步相關
- 在 《Eureka 源碼解析 —— Eureka-Server 集羣同步》
#getMaxThreadsForPeerReplication()
:同步應用實例信息最大線程數。#getMaxElementsInPeerReplicationPool()
:待執行同步應用實例信息事件緩衝最大數量。#getMaxTimeForReplication()
:執行單個同步應用實例信息狀態任務最大時間。#shouldSyncWhenTimestampDiffers()
:是否同步應用實例信息,當應用實例信息最後更新時間戳(lastDirtyTimestamp
)發生改變。#getWaitTimeInMsWhenSyncEmpty()
:Eureka-Server 啓動時,從遠程 Eureka-Server 讀取不到註冊信息時,多長時間不允許 Eureka-Client 訪問。#getPeerEurekaNodesUpdateIntervalMs()
:Eureka-Server 集羣節點更新頻率,單位:毫秒。
- 調用
#init()
方法,初始化配置文件對象。類似 PropertiesInstanceConfig,點擊《Eureka 源碼解析 —— Eureka-Client 初始化(一)之 EurekaInstanceConfig》「2.4 PropertiesInstanceConfig」查看詳細解析。默認配置文件名爲eureka-server
。 - 無配置文件的每個屬性 KEY 的枚舉類。
1. 概述
本文主要分享 Eureka-Server 啓動的過程。
考慮到整個初始化的過程中涉及的代碼特別多,拆分成兩兩篇文章:
推薦 Spring Cloud 書籍:
2. EurekaServerConfig
com.netflix.eureka.EurekaServerConfig
,Eureka-Server 配置接口。
2.1 類關係圖
2.2 配置屬性
點擊 EurekaServerConfig 查看配置屬性簡介,已經添加中文註釋,可以對照着英文註釋一起理解。這裏筆者摘出部分較爲重要的屬性:
2.3 DefaultEurekaServerConfig
com.netflix.eureka.DefaultEurekaServerConfig
,基於配置文件的 Eureka-Server 配置實現類,實現代碼如下:
|