自動配置相關配置類
InstanceRegistryProperties
EurekaServerConfigBean 服務端配置資訊
EurekaClientConfigBean 用戶端配置資訊
EurekaInstanceConfigBean 執行個體資訊
EurekaDashboardProperties
用戶端注冊實作:
(1) EurekaClientConfiguration#eurekaApplicationInfo 初始化目前執行個體資訊ManagerInstanceInfoFactory#create
(2) EurekaClientConfiguration#eurekaClient 執行個體化 DiscoveryClient的一個子類
(3) DiscoveryClient#register#renew 過程中,如果傳回404狀态碼,則進行注冊
(4) AbstractJerseyEurekaHttpClient#register rest http請求
用戶端下架:
(1) EurekaDiscoveryClientConfiguration#onApplicationEvent spring上下文關閉時下架eureka服務
(2) DiscoveryClient#shutdown 改成DOWN
(3) DiscoveryClient#unregister 調用cancel接口
用戶端擷取服務資訊
(1) DiscoveryClient#refreshRegistry()
(2) EurekaHttpClient#getApplications()
用戶端心跳檢查機制
(1) HeartbeatThread
(2) DiscoveryClient#renew
服務端高可用實作
p2p機制
(1) EurekaServerAutoConfiguration#eurekaServerContext 上下文初始化
(2) PeerEurekaNodes#start 重新整理peer叢集清單并啟動更新任務,配置中擷取 (eureka還提供dns發現機制,不推薦使用)
(3) PeerEurekaNodes.updatePeerEurekaNodes 維護peer清單
資訊同步
(1) PeerAwareInstanceRegistryImpl 用來同步renew/register/cancel..
(2) isReplication 表示這個請求是否來自其他peer,防止循環傳播
服務端擷取請求注冊
(1) EurekaServerAutoConfiguration#jerseyApplication
內建eureka原生包中的Jersey RESTful接口 #jerseyFilterRegistration filter形式
(2) ApplicationResource#addInstance() 受理請求
(3) InstanceRegistry#register() 釋出EurekaInstanceRegisteredEvent事件
(4) PeerAwareInstanceRegistryImpl#register() 叢集同步replicateToPeers
(5) AbstractInstanceRegistry#regiter() 存在ConcurrentHashMap
服務端存儲服務資訊
(1) AbstractInstanceRegistry.registry() 記憶體中存儲ConcurrentHashMap
服務剔除
(1) EurekaServerInitializerConfiguration#start(), EurekaServerBootstrap#contextInitialized(), EurekaServerBootstrap#initEurekaServerContext() 初始化 上下文
(2) InstanceRegistry#openForTraffic()
(3) AbstractInstanceRegistry#postInit() 執行EvictionTask
(4) 自我保護狀态下不剔除
自我保護
(1) PeerAwareInstanceRegistryImpl#isLeaseExpirationEnabled()
(2) numberOfRenewsPerMinThreshold 正常态下,一分鐘會收到多少用戶端的renewx = size * renewalPercentThreshold
新服務注冊時會重新計算這個值