精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring Cloud集成Nacos服務發現源碼解析?翻了三套源碼,保質保鮮!

開發 架構
這篇文章就以Nacos提供的服務注冊功能為主線,來講解Nacos的客戶端是如何在Spring Cloud進行集成和實現的。

[[400273]]

本文轉載自微信公眾號「程序新視界」,作者丑胖俠二師兄。轉載本文請聯系程序新視界公眾號。

前言

前面文章我們介紹了Nacos的功能及設計架構,這篇文章就以Nacos提供的服務注冊功能為主線,來講解Nacos的客戶端是如何在Spring Cloud進行集成和實現的。

本會配合源碼分析、流程圖整理、核心API解析等維度來讓大家深入淺出、系統的來學習。

Spring Boot的自動注冊

故事要從頭Spring Boot的自動注入開始。很多朋友大概都了解過Spring Boot的自動配置功能,而Spring Cloud又是基于Spring Boot框架的。

因此,在學習Nacos注冊業務之前,我們先來回顧一下Spring Boot的自動配置原理,這也是學習的入口。

Spring Boot通過@EnableAutoConfiguration注解,將所有符合條件的@Configuration配置都加載到當前SpringBoot創建并使用的IoC容器。

上述過程是通過@Import(AutoConfigurationImportSelector.class)導入的配置功能,AutoConfigurationImportSelector中的方法getCandidateConfigurations,得到待配置的class的類名集合,即所有需要進行自動配置的(xxxAutoConfiguration)類,這些類配置于META-INF/spring.factories文件中。

最后,根據這些全限定名類上的注解,如:OnClassCondition、OnBeanCondition、OnWebApplicationCondition條件化的決定要不要自動配置。

了解了Spring Boot的基本配置之后,我們來看看Nacos對應的自動配置在哪里。

Spring Cloud中的Nacos自動配置

查看Spring Cloud的項目依賴,本人引入依賴對應的jar包為spring-cloud-starter-alibaba-nacos-discovery-2021.1.jar;

對應的pom依賴為:

  1. <dependency> 
  2.     <groupId>com.alibaba.cloud</groupId> 
  3.     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> 
  4. </dependency> 

查看jar包中META-INF/spring.factories文件的內容:

  1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 
  2.   com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration,\ 
  3.   com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\ 
  4.   com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\ 
  5.   com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\ 
  6.   com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration,\ 
  7.   com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration,\ 
  8.   com.alibaba.cloud.nacos.NacosServiceAutoConfiguration 
  9. org.springframework.cloud.bootstrap.BootstrapConfiguration=\ 
  10.   com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration 

可以看到EnableAutoConfiguration類對應了一系列的Nacos自動配置類。

其中NacosServiceRegistryAutoConfiguration是用來封裝實例化Nacos注冊流程所需組件的,裝載了對三個對象NacosServiceRegistry、NacosRegistration、NacosAutoServiceRegistration,這三個對象整體都是為了Nacos服務注冊使用的。

  1. @Configuration(proxyBeanMethods = false
  2. @EnableConfigurationProperties 
  3. @ConditionalOnNacosDiscoveryEnabled 
  4. @ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled"
  5.         matchIfMissing = true
  6. @AutoConfigureAfter({ AutoServiceRegistrationConfiguration.class, 
  7.         AutoServiceRegistrationAutoConfiguration.class, 
  8.         NacosDiscoveryAutoConfiguration.class }) 
  9. public class NacosServiceRegistryAutoConfiguration { 
  10.  
  11.     @Bean 
  12.     public NacosServiceRegistry nacosServiceRegistry( 
  13.             NacosDiscoveryProperties nacosDiscoveryProperties) { 
  14.         return new NacosServiceRegistry(nacosDiscoveryProperties); 
  15.     } 
  16.  
  17.     @Bean 
  18.     @ConditionalOnBean(AutoServiceRegistrationProperties.class) 
  19.     public NacosRegistration nacosRegistration( 
  20.             ObjectProvider<List<NacosRegistrationCustomizer>> registrationCustomizers, 
  21.             NacosDiscoveryProperties nacosDiscoveryProperties, 
  22.             ApplicationContext context) { 
  23.         return new NacosRegistration(registrationCustomizers.getIfAvailable(), 
  24.                 nacosDiscoveryProperties, context); 
  25.     } 
  26.  
  27.     @Bean 
  28.     @ConditionalOnBean(AutoServiceRegistrationProperties.class) 
  29.     public NacosAutoServiceRegistration nacosAutoServiceRegistration( 
  30.             NacosServiceRegistry registry, 
  31.             AutoServiceRegistrationProperties autoServiceRegistrationProperties, 
  32.             NacosRegistration registration) { 
  33.         return new NacosAutoServiceRegistration(registry, 
  34.                 autoServiceRegistrationProperties, registration); 
  35.     } 

其中NacosServiceRegistry封裝的就是注冊流程,它繼承自ServiceRegistry:

  1. public class NacosServiceRegistry implements ServiceRegistry<Registration> {...} 

查看該類源碼,可以看到該類中實現了服務注冊、注銷、關閉、設置狀態、獲取狀態5個功能。

我們要追蹤的服務注冊功能,便是通過它提供的register方法來實現的。

至此,我們可以梳理一下Nacos客戶端在Spring Cloud中集成并實例化的處理流程。

Spring Cloud的ServiceRegistry接口

上面提到NacosServiceRegistry集成自ServiceRegistry,那么ServiceRegistry又是何方神圣呢?

ServiceRegistry接口是Spring Cloud的類,來看一下ServiceRegistry接口的定義:

  1. public interface ServiceRegistry<R extends Registration> { 
  2.  
  3.     void register(R registration); 
  4.     void deregister(R registration); 
  5.     void close(); 
  6.     void setStatus(R registration, String status); 
  7.     <T> T getStatus(R registration); 

可以看出ServiceRegistry接口中定義了服務注冊、注銷、關閉、設置狀態、獲取狀態五個接口。

如果看其他服務發現框架對Spring Cloud進行集成時,基本上都是實現的這個接口。也就是說,ServiceRegistry是Spring Cloud提供的一個服務發現框架集成的規范。對應的框架安裝規范實現對應的功能即可進行集成。

我們可以看到Eureka、Zookeeper、Consul在Spring Cloud中集成也都是實現了該接口,同時,如果你需要自定義服務發現功能,也可以通過實現該接口來達到目的。

NacosServiceRegistry服務注冊實現

暫且不關注其他的輔助類,直接來看NacosServiceRegistry#register方法,它提供了服務注冊的核心業務邏輯實現。

我們把該類的輔助判斷去掉,直接展示最核心的代碼如下:

  1. @Override 
  2. public void register(Registration registration) { 
  3.  
  4.     // 獲取NamingService 
  5.     NamingService namingService = namingService(); 
  6.     String serviceId = registration.getServiceId(); 
  7.     String group = nacosDiscoveryProperties.getGroup(); 
  8.  
  9.     // 構造實例,封裝信息來源于配置屬性 
  10.     Instance instance = getNacosInstanceFromRegistration(registration); 
  11.     // 將實例進行注冊 
  12.     namingService.registerInstance(serviceId, group, instance); 

上述代碼中NamingService已經屬于Nacos Client項目提供的API支持了。

關于Nacos Client的API流程查看,可直接查看Nacos對應的源碼,NamingService#registerInstance方法對應的流程圖整理如下:

上述流程圖還可以繼續細化,這個我們在后續章節中進行專門講解,這里大家知道大概的調用流程即可。

Spring Cloud服務注冊鏈路

下面我們來梳理一下Spring Cloud是如何進行服務注冊的,其中流程的前三分之二部分幾乎所有的服務注冊框架都是一樣的流程,只有最后一部分進行實例注冊時會調用具體的框架來進行實現。

直接來看整個調用的鏈路圖:

圖中不同的顏色代表這不同的框架,灰色表示業務代碼,淺綠色表示SpringBoot框架,深綠色表示Spring框架,淺橙色表示SpringCloud框架,其中這一部分也包含了依賴的Nacos組件部分,最后淺紫色代表著Nacos Client的包。

核心流程分以下幾步:

第一步,SpringBoot在啟動main方法時調用到Spring的核心方法refresh;

第二步,在Spring中實例化了WebServerStartStopLifecycle對象。

重點說一下WebServerStartStopLifecycle對象,它的start方法被調用時會發布一個ServletWebServerInitializedEvent事件類,這個事件類繼承自WebServerInitializedEvent。后面用來處理服務注冊的類AbstractAutoServiceRegistration同時也是一個監聽器,專門用來監聽WebServerInitializedEvent事件。

第三步,AbstractApplicationContext的finishRefresh中會間接調用DefaultLifecycleProcessor的startBeans方法,進而調用了WebServerStartStopLifecycle的start方法。就像上面說的,觸發了ServletWebServerInitializedEvent事件的發布。

第四步,AbstractAutoServiceRegistration監聽到對應的事件,然后基于Spring Cloud定義的ServiceRegistry接口進行服務注冊。

上面的描述省略了一些部分細節,但整個流程基本上就是SpringBoot在啟動時發布了一個事件,Spring Cloud監聽到對應的事件,然后進行服務的注冊。

小結

為了這篇文章,肝了好幾天。Spring Cloud源碼、Spring Boot源碼、Nacos源碼都翻了個遍。最終為大家分享了Nacos或者說是Spring Cloud中服務發現的實現機制及流程。

 

責任編輯:武曉燕 來源: 程序新視界
相關推薦

2021-08-10 07:00:00

Nacos Clien服務分析

2009-08-01 21:58:24

布線質量

2022-02-07 07:10:32

服務注冊功能

2021-07-12 08:00:21

Nacos 服務注冊源碼分析

2009-03-18 14:47:14

LinuxUbuntu 9.04主題

2022-12-07 08:02:43

Spring流程IOC

2023-12-23 18:04:40

服務Eureka工具

2013-11-28 10:09:49

微軟移動端系統

2021-08-27 07:47:07

Nacos灰度源碼

2021-07-16 06:56:50

Nacos注冊源碼

2023-01-10 07:52:15

2021-06-07 14:06:19

Spring SecuCSRF防御

2023-02-28 08:57:06

Spring上下線緩存

2025-05-27 08:05:00

Spring開發服務調用

2022-05-06 07:52:06

Nacos服務注冊

2022-05-08 17:53:38

Nacos服務端客戶端

2021-08-09 07:58:36

Nacos 服務注冊源碼分析

2012-06-18 16:18:56

移動電源

2017-06-25 13:33:25

Spring Clou微服務架構

2009-02-23 13:57:13

點贊
收藏

51CTO技術棧公眾號

96视频在线观看欧美| 亚洲第一视频在线播放| 亚洲尤物av| 欧美亚州韩日在线看免费版国语版| 久久久99爱| 中文字幕日产av| 欧美私人啪啪vps| 亚洲女在线观看| 91精品久久久久| 欧美精品videos极品| 欧美一性一交| 一区二区国产视频| 免费国产一区| a在线观看视频| 久久精品亚洲| 欧美噜噜久久久xxx| 亚洲理论片在线观看| 日本伊人久久| 欧美亚洲国产一区二区三区va| 欧美日韩激情四射| 草碰在线视频| 不卡电影一区二区三区| 国产在线视频2019最新视频| 天天综合网入口| 午夜久久影院| 最近中文字幕mv在线一区二区三区四区 | 孩xxxx性bbbb欧美| 国产91在线播放九色| 欧美日韩破处| 欧美岛国在线观看| 97超碰人人爽| 黄色精品视频| 欧美性少妇18aaaa视频| 国产一区二区四区| 少妇av在线| 中文字幕在线不卡| 少妇特黄a一区二区三区| 亚洲欧美综合一区二区| 国产精品538一区二区在线| 91精品视频在线免费观看| 一级黄色av片| 久久在线91| 538国产精品一区二区免费视频| 劲爆欧美第一页| 亚洲最新色图| 日韩最新av在线| 欧美性受xxxx黑人| 欧美日韩精品一区二区视频| 亚洲精品在线不卡| 成人免费无码大片a毛片| 久久久久97| 欧美精品一区二区不卡| 日本天堂在线播放| 都市激情亚洲| 亚洲成人精品视频| 亚洲一区二区在线免费| 老司机精品视频在线播放| 欧美精品一区二| 呦呦视频在线观看| 日日天天久久| 亚洲性av网站| 91资源在线播放| 日韩电影免费网址| 精品国产欧美一区二区三区成人| 国精产品久拍自产在线网站| 亚洲欧洲日韩| 不卡中文字幕av| 欧美精品成人久久| 中文亚洲免费| 国产精品久久久久999| 欧美日韩在线视频播放| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲精品视频免费看| 欧美aaaaa喷水| 免费在线观看污视频| 国产丝袜美腿一区二区三区| 亚洲春色在线视频| 国产在线一区二区视频| 亚洲人被黑人高潮完整版| 人人妻人人澡人人爽欧美一区双| а√在线中文网新版地址在线| 欧美色欧美亚洲高清在线视频| 人妻精品无码一区二区三区| 99久久婷婷国产综合精品首页| 欧美疯狂性受xxxxx喷水图片| av在线免费观看不卡| 欧美变态网站| 在线视频免费一区二区| 日韩va亚洲va欧美va清高| 黄色日韩精品| 国产精品入口福利| 亚洲免费不卡视频| 国产三级欧美三级| 一本色道久久88亚洲精品综合| av在线资源| 精品视频色一区| 国产精品一区二区无码对白| 精品国产网站| 欧美激情视频一区二区三区不卡| 伊人中文字幕在线观看| 国产一区二区三区四区在线观看| 鲁片一区二区三区| 国产成人无吗| 在线视频欧美精品| 欧美一级大片免费看| 成人嫩草影院| 97碰碰碰免费色视频| 伊人影院中文字幕| 99国产精品99久久久久久| 日本女人高潮视频| 都市激情综合| 欧美精品一区二区三区一线天视频 | 国产精品av免费| 涩涩涩在线视频| 欧美一区二区三区喷汁尤物| 国产一二三四五区| 一区在线播放| 亚洲xxx自由成熟| 成人资源www网在线最新版| 亚洲午夜av在线| www.午夜av| 成人羞羞视频在线看网址| 97免费视频在线播放| 成人1区2区3区| 中文字幕在线不卡一区二区三区 | 蜜桃av噜噜一区二区三区小说| 国产一区免费在线| 色呦呦在线看| 7777女厕盗摄久久久| 国产中年熟女高潮大集合| 亚洲人成人一区二区三区| 亚洲aⅴ男人的天堂在线观看| 69xxxx欧美| 色欧美乱欧美15图片| 美女扒开腿免费视频| 欧美/亚洲一区| 成人久久精品视频| 秋霞成人影院| 欧美视频一区二区| 国产精品成人无码免费| 久久综合婷婷| 欧美精品二区三区四区免费看视频| 超碰中文在线| 亚洲成色999久久网站| 激情视频在线播放| 国产suv一区二区三区88区| 视频一区二区视频| 北岛玲精品视频在线观看| x99av成人免费| 97成人免费视频| 亚洲天天做日日做天天谢日日欢| 天堂中文av在线| 99久久久久国产精品| 成人有码在线播放| 国产精品va在线观看视色 | 欧洲亚洲女同hd| 日本中文字幕一区二区有码在线| 欧美日韩中文字幕综合视频| 久久国产精品影院| 日本成人在线不卡视频| 四虎影院一区二区三区 | 国产精品久久久一区二区三区| 1区2区在线观看| 欧美不卡在线视频| 国产无码精品在线播放| av一区二区三区在线| 国产中文字幕视频在线观看| 窝窝社区一区二区| 国产精品国产三级国产专播精品人| 国产高清视频免费最新在线| 欧美日韩久久不卡| 一区二区视频免费看| 国产老妇另类xxxxx| 国产人妻777人伦精品hd| 亚州精品视频| 国产精品日日摸夜夜添夜夜av| 岛国中文字幕在线| 亚洲国产一区二区三区四区| www.国产毛片| 自拍偷在线精品自拍偷无码专区| 性xxxxxxxxx| 亚洲综合丁香| 五月天男人天堂| 一区二区三区国产好| 55夜色66夜色国产精品视频| 99中文字幕一区| 日韩小视频在线观看专区| 国产视频91在线| 国产精品第四页| 91丨porny丨对白| 日韩精品乱码av一区二区| 欧美三级午夜理伦三级老人| 日本久久成人网| 成人a在线视频| 华人av在线| 久久精品国产综合| 欧美自拍偷拍第一页| 欧美视频一二三区| 五月天婷婷丁香| 日韩一区在线看| 极品粉嫩小仙女高潮喷水久久| 精品影院一区二区久久久| 水蜜桃色314在线观看| 日韩一区三区| 国产精品乱码视频| 在线不卡一区| 日本精品久久电影| aa在线视频| 国产一区二区三区在线播放免费观看 | 国产精品毛片一区视频| 韩日一区二区| 97精品久久久| 91福利国产在线观看菠萝蜜| 中文字幕亚洲一区二区三区五十路 | 精品国产99国产精品| 一级日韩一级欧美| 色狠狠桃花综合| 国产乡下妇女做爰毛片| 亚洲欧美激情小说另类| 公肉吊粗大爽色翁浪妇视频| 91亚洲资源网| 亚洲视频天天射| 久久成人综合网| 国产三级日本三级在线播放| 99视频一区| 国产爆乳无码一区二区麻豆| 小小影院久久| 五月天亚洲综合| 九九视频精品全部免费播放| 国产欧美韩日| aiai久久| 国产精品日韩一区二区| 日韩精品久久久久久久软件91| 国产乱人伦真实精品视频| 日本精品在线| 亚洲综合色婷婷在线观看| 欧美日韩国产中文字幕| 国产色无码精品视频国产| 欧美激情在线一区二区三区| 天堂久久久久久| 东方aⅴ免费观看久久av| 色网站在线视频| 久久成人免费日本黄色| 久久这里只精品| 久久精品国产亚洲aⅴ| 亚洲电影免费观看高清完整版在线| 超碰91在线播放| 精品一区二区免费视频| 另类小说第一页| 日日夜夜精品免费视频| 男女曰b免费视频| 成人免费高清| 国产日韩欧美电影| 人人妻人人澡人人爽人人精品| 成人禁用看黄a在线| 亚洲av午夜精品一区二区三区| 国产精品自拍一区| 黄色大片中文字幕| 中文天堂资源在线| 精品一区二区三区在线播放视频| 中文字幕天天干| 蜜臀av性久久久久蜜臀av麻豆| 日本免费观看网站| 老司机午夜精品| 亚洲男人天堂2021| 国产成人一区二区精品非洲| 在线播放第一页| 99久久婷婷国产综合精品电影| 特级西西人体4444xxxx| 久久久久国产精品免费免费搜索| 国产视频不卡在线| 亚洲日本丝袜连裤袜办公室| 久久久久久久久97| 欧美日韩美女在线观看| 精品乱码一区内射人妻无码| 欧美卡1卡2卡| 高h放荡受浪受bl| 亚洲毛片在线免费观看| 91在线看片| 久久99国产精品自在自在app| av影院在线免费观看| 国产精品久久77777| 国产精品美女久久久久人| 国产精品一区二区三区四区五区 | gogo久久| 国产不卡av在线| 最新亚洲国产| 韩国成人动漫在线观看| 精品精品久久| 亚洲熟妇无码av在线播放| 久久不射中文字幕| 亚洲精品乱码久久久久久动漫| 99国产精品99久久久久久| 色www亚洲国产阿娇yao| 亚洲国产精品嫩草影院| 中文字幕在线2019| 精品国产乱码久久久久久图片| 福利片在线看| 久久久久亚洲精品成人网小说| 亚洲www啪成人一区二区| 97超级碰碰| 欧洲视频一区| 色欲色香天天天综合网www| 麻豆91精品91久久久的内涵| 国产亚洲色婷婷久久99精品91| 国产精品乱码妇女bbbb| 日韩熟女精品一区二区三区| 欧美日本韩国一区| 狠狠色伊人亚洲综合网站l| 欧美国产在线电影| 精品亚洲a∨| 九色91视频| 欧美三级网页| 激情五月婷婷基地| 久久奇米777| 精品一区二区三区人妻| 欧美精品123区| 九色在线视频蝌蚪| 久久久久亚洲精品成人网小说| 亚洲国产91视频| 日本精品一区| 国产一区成人| 日本50路肥熟bbw| 亚洲视频图片小说| 依依成人在线视频| 这里只有精品视频在线| videos性欧美另类高清| 精品国产一二| 亚洲日本成人| www.美色吧.com| 一区二区三区日韩精品| 国产精品综合在线| 精品国产一区二区三区久久久狼 | 在线观看一区| 亚洲AV成人精品| 亚洲免费视频中文字幕| 国产精品综合在线| 久久久av电影| 91丨精品丨国产| 正在播放亚洲| 激情久久五月天| 亚洲少妇xxx| 欧美精品第1页| 国产精品实拍| 91久热免费在线视频| 五月天久久777| 一级 黄 色 片一| 亚洲欧美另类小说| 精品人妻久久久久一区二区三区| 麻豆成人在线看| 日韩精品一区二区三区中文字幕| 女人床在线观看| 国产精品白丝jk黑袜喷水| a级片在线观看免费| 精品剧情在线观看| 99在线视频影院| 久久波多野结衣| 丝袜美腿亚洲一区二区图片| 精品人妻一区二区三区蜜桃视频| 在线看日韩精品电影| av成人手机在线| 亚洲aa中文字幕| 日韩视频一区| 国产亚洲精品熟女国产成人| 欧美日韩中文字幕一区二区| 黄色网在线看| 成人免费视频网站| 亚洲综合电影一区二区三区| 调教驯服丰满美艳麻麻在线视频| 欧美人与禽zozo性伦| av毛片在线免费看| 国产精品久久久久久久久久久久午夜片 | 香蕉久久精品| 成年人在线观看视频免费| 成人免费在线视频观看| 囯产精品一品二区三区| 欧洲成人午夜免费大片| 日韩综合精品| 亚洲欧美激情一区二区三区| 亚洲国产日韩在线一区模特| 欧美日韩国产综合视频 | 第四色中文综合网| 韩国日本美国免费毛片| 一区二区三区在线视频观看58 | 91浏览器在线视频| 97人妻精品视频一区| 欧美成人网在线| 日韩在线你懂的| 日韩av片免费观看| 精品国产91久久久久久| 色开心亚洲综合| 国产传媒欧美日韩| 男男成人高潮片免费网站| 久艹视频在线观看| 在线成人免费网站| 国产精品高潮呻吟久久久久| 中文字幕第21页| 亚洲成人精品一区二区| 日本三级在线视频| 国内一区二区在线视频观看|