前言
上篇文章已經介紹了 Eureka Server上下文創建相關的Eureka Client邏輯,這一部分還是比較複雜的。接下來就講解下Eureka Server上下文初始化最後的部分,然後加上整個Eureka Server啓動的總結。
如若轉載 請標明來源:一枝花算不算浪漫
initEurekaServerContext
EurekaBootStrap.initEurekaServerContext
protected void initEurekaServerContext() throws Exception {
// 省略之前內容
// 3、處理註冊相關的事情 下面是拆解單詞加深理解:
// PeerAware:可以識別eureka server集羣的。多個同樣的東西組成一個集羣,peers:集羣,peer就是集羣中的一個實例
// InstanceRegistry:實例註冊,服務實例註冊。註冊表,這個裏面放了所有的主車道這個eureka server上的服務實例,就是一個服務實例的註冊表。
// PeerAwareInstanceRegistry:可以感知eureka server集羣的服務實例註冊表,eureka client(作爲服務實例)過來註冊的註冊表,而且這個註冊表是可以感知到eureka
// server集羣的,假如有一個eureka server集羣的話,這裏包含了其他eureka server中的服務實例註冊表信息的。
PeerAwareInstanceRegistry registry;
if (isAws(applicationInfoManager.getInfo())) {
registry = new AwsInstanceRegistry(
eurekaServerConfig,
eurekaClient.getEurekaClientConfig(),
serverCodecs,
eurekaClient
);
awsBinder = new AwsBinderDelegate(eurekaServerConfig, eurekaClient.getEurekaClientConfig(), registry, applicationInfoManager);
awsBinder.start();
} else {
// 創建PeerAwareInstanceRegistry。最近取消的實例,最近註冊的實例都會保存到registry中
registry = new PeerAwareInstanceRegistryImpl(
eurekaServerConfig,
eurekaClient.getEurekaClientConfig(),
serverCodecs,
eurekaClient
);
}
// 4、處理peer節點相關的事情
// peerEurekaNodes 代表了eureka server集羣,peers大概來說是多個相同的實例組成的一個集羣,peer就是peers中的一個實例
// PeerEurekaNodes,代表的是eureka server集羣
PeerEurekaNodes peerEurekaNodes = getPeerEurekaNodes(
registry,
eurekaServerConfig,
eurekaClient.getEurekaClientConfig(),
serverCodecs,
applicationInfoManager
);
// 5、完成eureka-server上下文(context)的構建及初始化
serverContext = new DefaultEurekaServerContext(
eurekaServerConfig,
serverCodecs,
registry,
peerEurekaNodes,
applicationInfoManager
);
// 將上下文信息放到holder中
EurekaServerContextHolder.initialize(serverContext);
// 將eureka server集羣啓動起來。裏面會更新eureka server集羣的信息,讓當前的eureka server感知到所有的其他eureka server
// 然後搞一個定時調度任務,就是一個後臺線程,每隔一段時間,更新eureka server集羣的信息
// registry.init: 基於eureka server集羣的信息,來初始化註冊表,將eureka server集羣中所有的eureka
// server的註冊表信息抓取過來,放到自己本地的註冊表中。都是跟eureka server集羣中之間的註冊表信息互換有關聯的
serverContext.initialize();
logger.info("Initialized server context");
// Copy registry from neighboring eureka node
// 6、處理一些善後的事情,從相鄰的eureka節點拷貝註冊信息
// registry.syncUp(): 從相鄰的一個eureka server節點拷貝註冊表信息,如果拷貝失敗,就找下一個
int registryCount = registry.syncUp();
registry.openForTraffic(applicationInfoManager, registryCount);
// Register all monitoring statistics.
// 7、註冊所有的監控統計項
EurekaMonitors.registerAllStats();
}
這裏備註比較多,基本上是每個方法 實現的目的,並沒有進一步跟蹤細節問題,還是之前講到的,看源碼還是要抓大放小,我們儘量先把主流程搞清楚,然後再去一步步攻克細節。
EurekaServer啓動流程總結
到這裏 eureka server啓動的相關代碼就看完了,下面有一張流程圖來總結一下的:
申明
本文章首發自本人博客:https://www.cnblogs.com/wang-meng 和公衆號:壹枝花算不算浪漫,如若轉載請標明來源!
感興趣的小夥伴可關注個人公衆號:壹枝花算不算浪漫