【一起學源碼-微服務】Nexflix Eureka 源碼四:EurekaServer啟動之完成上下文構建及EurekaServer總結

  • 2019 年 12 月 30 日
  • 筆記

前言

上篇文章已經介紹了 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 和公眾號:壹枝花算不算浪漫,如若轉載請標明來源!

感興趣的小夥伴可關注個人公眾號:壹枝花算不算浪漫