精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日本黄色一级视频| 女女调教被c哭捆绑喷水百合| 国产免费视频在线| 免费欧美日韩国产三级电影| 中文字幕亚洲综合久久筱田步美| 国产永久免费网站| sm性调教片在线观看 | 2019中文字幕在线观看| 欧洲熟妇的性久久久久久| 亚洲最新无码中文字幕久久| 国产精品久久久久久久久免费桃花 | 蜜桃视频在线观看一区二区| 欧美日韩国产成人在线| 欧美 日本 国产| 高清久久精品| 欧美性猛交xxxx乱大交3| 最新中文字幕久久| 日本在线视频1区| 国模无码大尺度一区二区三区| 2019日本中文字幕| 青青草原在线免费观看| 精品一区欧美| 精品国产免费一区二区三区香蕉| 国产v亚洲v天堂无码久久久| xxxx另类黑人| 1024成人网色www| 欧美激情论坛| 亚洲国产精彩视频| 激情成人午夜视频| 国产精品第二页| 午夜偷拍福利视频| 亚洲国产精品久久久久蝴蝶传媒| 在线精品播放av| 北岛玲一区二区| 粉嫩av一区二区| 欧美一级爆毛片| 亚洲最大成人在线观看| 国产精品迅雷| 午夜精彩视频在线观看不卡| 久久这里只有精品8| 国产最新在线| 中文字幕日韩一区| 亚洲欧洲日夜超级视频| 国产剧情在线观看| 久久影视一区二区| 99中文字幕| 一级片在线观看视频| 青草av.久久免费一区| 热99在线视频| 中文字幕视频网站| 亚洲一区免费| 91av成人在线| av黄色在线看| 亚洲欧美视频| 青青草成人在线| 男人的天堂av网站| 日韩电影在线观看电影| 国产精品99导航| 国产主播第一页| 日韩av高清在线观看| 国产精品美女免费视频| 中文字幕av影视| 久久99精品久久久久久国产越南 | 99久久精品无免国产免费| 久久精品国产精品亚洲红杏| 国产日韩欧美在线视频观看| 国产精品久久久久久久免费看| 激情av综合网| 国产精品一区视频| 日本中文字幕电影在线观看 | 日韩午夜电影在线观看| 日韩精品xxx| 白白在线精品| 日韩大陆欧美高清视频区| 色欲av无码一区二区三区| 国产一区日韩| 日韩在线激情视频| 久久久久久久福利| 一区二区高清| 国产精品日韩欧美综合| 精品国产av一区二区| 成人污视频在线观看| 另类欧美小说| 日本视频在线播放| 亚洲大尺度视频在线观看| 成人av一级片| 香蕉久久一区| 日韩一区二区免费视频| xxxxxx黄色| 精品一区二区三| 欧美成年人网站| 久久国产黄色片| 麻豆国产精品777777在线| 999热视频| 女人天堂在线| 亚洲视频在线一区| 日韩av片在线看| 四虎地址8848精品| 精品第一国产综合精品aⅴ| 88久久精品无码一区二区毛片| 国产精品久久久久久影院8一贰佰| 欧美激情第1页| 国产天堂第一区| 国产精品香蕉一区二区三区| 久久免费一区| √天堂8在线网| 日韩欧中文字幕| 制服.丝袜.亚洲.中文.综合懂| 免费精品国产的网站免费观看| 插插插亚洲综合网| 成人一级免费视频| 不卡免费追剧大全电视剧网站| 亚洲欧洲一区二区在线观看| 麻豆理论在线观看| 91精品国产美女浴室洗澡无遮挡| 在线观看福利片| 亚洲激情女人| 91久久久在线| h视频在线播放| 精品国产福利视频| 日本女人性视频| 91视频综合| 国产福利视频一区二区| 日韩在线观看视频一区| 综合av第一页| 午夜精品在线免费观看| 欧美电影完整版在线观看| 欧美精品在线观看| 91成品人影院| 欧美国产日韩亚洲一区| 国产乱子伦农村叉叉叉| 91精品久久久久久综合五月天| 深夜福利一区二区| 欧美成人精品网站| 久久久.com| 欧美 国产 日本| 九九热hot精品视频在线播放 | 亚洲激情在线激情| 国产xxxxx在线观看| 一区二区三区在线免费看| 最近2019中文字幕大全第二页| 国产剧情在线视频| 精品一区二区三区四| 一级欧美视频| 亚洲视频axxx| 日本三级网站在线观看| 国产一区二区免费看| 五月婷婷一区| 亚洲电影有码| 亚洲性xxxx| aaa在线视频| 91麻豆6部合集magnet| 欧美日韩激情四射| 日韩一级淫片| 欧美激情第三页| 丰满人妻一区二区三区免费| 亚洲摸摸操操av| 中文字幕亚洲影院| 亚洲欧洲日韩| 99精品在线直播| 国模私拍视频在线播放| 精品电影一区二区三区| 国产一级特黄aaa大片| 不卡高清视频专区| 国产xxxxx在线观看| 久久超碰99| 国产精品视频精品视频| 老司机在线视频二区| 欧美一级二级三级乱码| 日韩免费一二三区| 97国产一区二区| 毛片av免费在线观看| 成人毛片在线| 成人免费网站在线观看| 青青草视频在线免费直播| 亚洲福利在线视频| 日韩一级片中文字幕| 国产精品美女久久久久av爽李琼| 欧美又黄又嫩大片a级| 欧美日韩亚洲一区三区 | 亚洲图色一区二区三区| 国内精品久久久久久| 99热手机在线| 亚洲淫成人影院| 在线a欧美视频| 国产毛片一区二区三区va在线| 国产精品一区二区人人爽| 久久99伊人| 欧美午夜精品久久久久久蜜| 欧美日韩在线观看成人| 另类小说欧美激情| 成人在线免费高清视频| 午夜欧洲一区| 国产精品揄拍500视频| 中文字幕中文字幕在线十八区| 亚洲二区中文字幕| 中文字幕你懂的| 亚洲自拍偷拍九九九| 无码h肉动漫在线观看| 捆绑调教一区二区三区| 国产av人人夜夜澡人人爽麻豆| 国产在线观看91一区二区三区| 91免费高清视频| 成人av观看| 欧美成人高清视频| 成年网站在线| 亚洲国产精品字幕| 国产口爆吞精一区二区| 欧美性猛交xxx| 毛片aaaaa| 国产精品毛片高清在线完整版| 无码国产精品一区二区免费式直播| 日韩二区三区在线观看| 极品粉嫩国产18尤物| 成人在线一区| 欧美不卡1区2区3区| 午夜电影一区| 国产欧洲精品视频| 惠美惠精品网| 韩国日本不卡在线| av网站大全在线| 波多野结衣中文字幕一区二区三区| 亚洲啊啊啊啊啊| 最新精品国偷自产在线| 亚洲中国色老太| 日本综合视频| 26uuu另类亚洲欧美日本老年| 宅男在线观看免费高清网站| 中文字幕综合一区| 欧美在线观看在线观看| 欧美日韩免费在线视频| 亚洲xxxx3d动漫| 国产亚洲一区字幕| 亚洲av无码一区二区三区观看 | 欧美成人一区在线| 国产二区视频在线观看| 精品视频久久久久久久| 免费的黄色av| 日韩三级视频在线看| 国产精品国产三级国产普通话对白| 色狠狠一区二区| 亚洲欧美一区二区三区在线观看| 天天综合日日夜夜精品| 日本视频www| 亚洲成人动漫在线观看| 成人性生交大片免费看中文视频| 国产精品99蜜臀久久不卡二区| 欧美xxxhd| 97**国产露脸精品国产| www.51av欧美视频| 久久人人97超碰精品888| 日韩少妇视频| 欧美丰满老妇厨房牲生活| 国产麻豆欧美日韩一区| 久久精品五月婷婷| 日本精品在线观看| 96国产粉嫩美女| 国产精品一区二区三区www| 成人字幕网zmw| 无码精品在线观看| 欧美日韩国产首页| 国产精品无码一区| 在线观看网站黄不卡| 亚洲欧美日韩激情| 91官网在线观看| 波多野结衣日韩| 欧美色精品天天在线观看视频| 中文字幕乱码人妻二区三区| 欧美性淫爽ww久久久久无| 国产成人免费高清视频| 天天精品视频| 亚洲高清视频一区二区| 欧美军人男男激情gay| 亚洲激情一区二区| 亚洲成人99| 日韩免费在线观看av| 国产精品入口| 亚洲老女人av| 国产理论片在线观看| www.日韩大片| 99久久人妻精品免费二区| av不卡在线播放| 色无极影院亚洲| 亚洲欧洲日韩一区二区三区| 日日骚一区二区三区| 亚洲国产乱码最新视频| 无码人妻一区二区三区免费| 欧美日韩黄色一区二区| 黄色一级视频片| 日韩免费视频| 中文字幕精品在线播放| 亚洲国产mv| 免费看a级黄色片| 激情小说亚洲一区| 中文在线观看免费视频| 国产夜色精品一区二区av| 91人妻一区二区三区蜜臀| 亚洲第一激情av| 精品久久久三级丝袜| 依依成人综合网| 欧美人妇做爰xxxⅹ性高电影| 一级黄色片在线观看| 亚洲精品97久久| 五月天婷婷在线视频| 精品中文字幕视频| 免费观看成人性生生活片 | 加勒比婷婷色综合久久| 亚洲成va人在线观看| 亚洲精品无码久久久久| 精品剧情v国产在线观看在线| 视频在线观看你懂的| 久久精品一本久久99精品| 涩涩视频在线播放| 91久久精品视频| 国产精品一区高清| 中文字幕欧美日韩在线| 制服丝袜中文字幕在线| 日本亚洲精品在线观看| 国产激情一区| 欧美裸体网站| 精品二区视频| 加勒比av中文字幕| 久久久一区二区| 一区二区三区免费高清视频| 欧美图区在线视频| 中文成人无字幕乱码精品区| 99视频精品| 中文字幕 91| 成人aaaa免费全部观看| 精品国产视频一区二区三区| 欧美色中文字幕| 欧洲一区av| 欧美精品福利视频| 欧美电影院免费观看| 亚洲精品成人自拍| 天堂资源在线中文精品| 国产永久免费视频| 欧美性极品少妇| 天天插天天干天天操| 上原亚衣av一区二区三区| 怡红院成人在线| 国产一区二区三区高清视频| 欧美+亚洲+精品+三区| 手机在线成人免费视频| 国产色产综合产在线视频 | 亚洲一区二区3| 99久久久久久久| 国产盗摄一区二区三区| 麻豆精品国产免费| 欧美视频一区二| 亚洲色大成网站www| 国外成人在线视频| 乱中年女人伦av一区二区| 精品人妻人人做人人爽| 国产成a人亚洲| 国产一级视频在线播放| 精品福利一区二区三区| 黄色视屏在线免费观看| 精品久久久久久亚洲| 国产女优一区| 日本xxxxxxxxx18| 欧美在线影院一区二区| 97最新国自产拍视频在线完整在线看| 国产精品69av| 日韩伦理视频| 久久人人爽人人片| 一区二区三区日韩| 四季av日韩精品一区| 欧美性受xxxx白人性爽| 国产欧美日韩精品一区二区免费 | 亚洲国产精品成人av| 乱馆动漫1~6集在线观看| 日韩成人av电影在线| 久久精品国产99久久6| 亚洲国产精品久| 亚洲国产精品字幕| 日韩制服一区| 永久免费网站视频在线观看| 成人黄色网址在线观看| 久久久久99精品成人片我成大片| 国产一区二区三区18| 电影一区二区三区久久免费观看| 福利在线一区二区| 国产亚洲精品超碰| 国产精品亚洲欧美在线播放| 久久久久久久久91| 久久综合色占| 日本中文字幕在线不卡| 精品日韩美女的视频高清| av在线中文| 中文字幕 人妻熟女| 精品伊人久久97| 精品自拍视频| 成年丰满熟妇午夜免费视频| 不卡av电影在线播放| 一级黄色片在线播放| 91精品国产91久久久久久久久| 欧美色女视频| 一级黄色电影片| 欧美三级日本三级少妇99|