SpringCloud?服務(wù)注冊(cè)中的nacos實(shí)現(xiàn)過(guò)程
如下圖,org.springframework.cloud.spring-cloud-commons包下定義了一系列接口,其中就包括serviceregistry的系列規(guī)范,并通過(guò)SPI機(jī)制去調(diào)用接口實(shí)現(xiàn)。

在該包的META-INF/spring.factories文件中,可以找到EnableAutoConfiguration.class為key的value中有AutoServiceRegistrationAutoConfiguration.class這一項(xiàng)。

來(lái)看看這個(gè)AutoServiceRegistrationAutoConfiguration配置類(lèi):

對(duì)應(yīng)的,在com.alibaba.cloud.nacos包下(位于spring-cloud-starter-nacos-discovery jar包中)的META-INF/spring.fatories有個(gè)nacos服務(wù)注冊(cè)配置類(lèi),如下圖:

這個(gè)NacosServiceRegistryAutoConfiguration 配置類(lèi)就定義了上面SpringCloud的AutoServiceRegistration接口的實(shí)現(xiàn)類(lèi):
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)類(lèi)
**/
@Bean
@ConditionalOnBean(AutoServiceRegistrationProperties.class)
public NacosAutoServiceRegistration nacosAutoServiceRegistration(
NacosServiceRegistry registry,
AutoServiceRegistrationProperties autoServiceRegistrationProperties,
NacosRegistration registration) {
return new NacosAutoServiceRegistration(registry,
autoServiceRegistrationProperties, registration);
}
}

NacosAutoServiceRegistration中的register()方法開(kāi)始注冊(cè)服務(wù),整個(gè)調(diào)用流程為:

繼續(xù)追根溯源,這個(gè)registry()方法是在AbstractAutoServiceRegistration implements ApplicationListener<WebServerInitializedEvent>類(lèi)的onApplicationEvent()方法(onApplicationEvent->bind->start->registey) 。
調(diào)用的心跳默認(rèn)5秒一次,具體可參考BeatReactor類(lèi)中的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ò)程的文章就介紹到這了,更多相關(guān)SpringCloud 服務(wù)注冊(cè)nacos內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決mybatis三表連接查詢(xún)數(shù)據(jù)重復(fù)的問(wèn)題
這篇文章主要介紹了解決mybatis三表連接查詢(xún)數(shù)據(jù)重復(fù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
Mybatis中TypeAliasRegistry的作用及使用方法
Mybatis中的TypeAliasRegistry是一個(gè)類(lèi)型別名注冊(cè)表,它的作用是為Java類(lèi)型建立別名,使得在Mybatis配置文件中可以使用別名來(lái)代替完整的Java類(lèi)型名。使用TypeAliasRegistry可以簡(jiǎn)化Mybatis配置文件的編寫(xiě),提高配置文件的可讀性和可維護(hù)性2023-05-05
使用Java校驗(yàn)SQL語(yǔ)句的合法性五種解決方案
這篇文章主要介紹了如何用java校驗(yàn)SQL語(yǔ)句的合法性(提供五種解決方案),使用JDBC?API和JSqlParser庫(kù)、正則表達(dá)式、ANTLR解析器生成器或Apache?Calcite庫(kù)都可以實(shí)現(xiàn)校驗(yàn)SQL語(yǔ)句的合法性,需要的朋友可以參考下2023-04-04
SpringBoot整合flyway實(shí)現(xiàn)步驟解析
這篇文章主要介紹了SpringBoot整合flyway實(shí)現(xiàn)步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
基于Mybatis Plus實(shí)現(xiàn)多表分頁(yè)查詢(xún)的示例代碼
這篇文章主要介紹了基于Mybatis Plus實(shí)現(xiàn)多表分頁(yè)查詢(xún)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Java并發(fā)編程中使用Executors類(lèi)創(chuàng)建和管理線程的用法
這篇文章主要介紹了Java并發(fā)編程中使用Executors類(lèi)創(chuàng)建和管理線程的用法,文中舉了用其啟動(dòng)線程和設(shè)置線程優(yōu)先級(jí)的例子,需要的朋友可以參考下2016-03-03
Struts2開(kāi)發(fā)環(huán)境搭建 附簡(jiǎn)單登錄功能實(shí)例
這篇文章主要介紹了Struts2開(kāi)發(fā)環(huán)境搭建,為大家分享一個(gè)簡(jiǎn)單登錄功能實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
MyBatis-Plus詳解(環(huán)境搭建、關(guān)聯(lián)操作)
MyBatis-Plus 是一個(gè) MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生,今天通過(guò)本文給大家介紹MyBatis-Plus環(huán)境搭建及關(guān)聯(lián)操作,需要的朋友參考下吧2022-09-09

