SpringCloud?服務(wù)注冊(cè)中的nacos實(shí)現(xiàn)過程
如下圖,org.springframework.cloud.spring-cloud-commons
包下定義了一系列接口,其中就包括serviceregistry
的系列規(guī)范,并通過SPI機(jī)制去調(diào)用接口實(shí)現(xiàn)。
在該包的META-INF/spring.factories
文件中,可以找到EnableAutoConfiguration.class
為key的value中有AutoServiceRegistrationAutoConfiguration.class
這一項(xiàng)。
來看看這個(gè)AutoServiceRegistrationAutoConfiguration
配置類:
對(duì)應(yīng)的,在com.alibaba.cloud.nacos
包下(位于spring-cloud-starter-nacos-discovery jar包中)的META-INF/spring.fatories
有個(gè)nacos服務(wù)注冊(cè)配置類,如下圖:
這個(gè)NacosServiceRegistryAutoConfiguration
配置類就定義了上面SpringCloud的AutoServiceRegistration
接口的實(shí)現(xiàn)類:
package com.alibaba.cloud.nacos.registry; ... /** * @author xiaojing * @author <a href="mailto:mercyblitz@gmail.com" rel="external nofollow" >Mercy</a> */ @Configuration(proxyBeanMethods = false) @EnableConfigurationProperties @ConditionalOnNacosDiscoveryEnabled @ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true) @AutoConfigureAfter({ AutoServiceRegistrationConfiguration.class, AutoServiceRegistrationAutoConfiguration.class, NacosDiscoveryAutoConfiguration.class }) public class NacosServiceRegistryAutoConfiguration { @Bean public NacosServiceRegistry nacosServiceRegistry( NacosDiscoveryProperties nacosDiscoveryProperties) { return new NacosServiceRegistry(nacosDiscoveryProperties); } @Bean @ConditionalOnBean(AutoServiceRegistrationProperties.class) public NacosRegistration nacosRegistration( ObjectProvider<List<NacosRegistrationCustomizer>> registrationCustomizers, NacosDiscoveryProperties nacosDiscoveryProperties, ApplicationContext context) { return new NacosRegistration(registrationCustomizers.getIfAvailable(), nacosDiscoveryProperties, context); } /** ** 這里,這個(gè)NacosAutoServiceRegistration就是AutoServiceRegistration接口的實(shí)現(xiàn)類 **/ @Bean @ConditionalOnBean(AutoServiceRegistrationProperties.class) public NacosAutoServiceRegistration nacosAutoServiceRegistration( NacosServiceRegistry registry, AutoServiceRegistrationProperties autoServiceRegistrationProperties, NacosRegistration registration) { return new NacosAutoServiceRegistration(registry, autoServiceRegistrationProperties, registration); } }
NacosAutoServiceRegistration
中的register()
方法開始注冊(cè)服務(wù),整個(gè)調(diào)用流程為:
繼續(xù)追根溯源,這個(gè)registry()
方法是在AbstractAutoServiceRegistration implements ApplicationListener<WebServerInitializedEvent>
類的onApplicationEvent()
方法(onApplicationEvent->bind->start->registey) 。
調(diào)用的心跳默認(rèn)5秒一次,具體可參考BeatReactor
類中的buildBeatInfo()
方法,其中有個(gè)beatInfo.setPeriod(instance.getInstanceHeartBeatInterval());
這里獲取到一個(gè)常量5s。
更加詳細(xì)的流程可以參考:閱讀Naocs源碼
另外上面最后一步的NamingClientProxy
接口的實(shí)現(xiàn)如下,利用到了委托模式(delegate)也叫代理模式?:
到此這篇關(guān)于SpringCloud 服務(wù)注冊(cè)中的nacos實(shí)現(xiàn)過程的文章就介紹到這了,更多相關(guān)SpringCloud 服務(wù)注冊(cè)nacos內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
myeclipse開發(fā)servlet_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
MyEclipse,是在eclipse基礎(chǔ)上加上自己的插件開發(fā)而成的功能強(qiáng)大的企業(yè)級(jí)集成開發(fā)環(huán)境,主要用于Java、Java EE以及移動(dòng)應(yīng)用的開發(fā)。下面這篇文章主要給大家介紹了關(guān)于myeclipse開發(fā)servlet的相關(guān)資料,需要的朋友可以參考下。2017-07-07Java中ByteArrayInputStream和ByteArrayOutputStream用法詳解
這篇文章主要介紹了Java中ByteArrayInputStream和ByteArrayOutputStream用法詳解,?ByteArrayInputStream?的內(nèi)部額外的定義了一個(gè)計(jì)數(shù)器,它被用來跟蹤?read()?方法要讀取的下一個(gè)字節(jié)2022-06-06SpringBoot整合Xxl-job實(shí)現(xiàn)定時(shí)任務(wù)的全過程
XXL-JOB是一個(gè)分布式任務(wù)調(diào)度平臺(tái),其核心設(shè)計(jì)目標(biāo)是開發(fā)迅速、學(xué)習(xí)簡(jiǎn)單、輕量級(jí)、易擴(kuò)展,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Xxl-job實(shí)現(xiàn)定時(shí)任務(wù)的相關(guān)資料,需要的朋友可以參考下2022-01-01java實(shí)現(xiàn)ThreadLocal線程局部變量的實(shí)現(xiàn)
本文主要介紹了java實(shí)現(xiàn)ThreadLocal線程局部變量的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Spring事件監(jiān)聽機(jī)制ApplicationEvent方式
這篇文章主要介紹了Spring事件監(jiān)聽機(jī)制ApplicationEvent方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09