SpringCloud|SpringCloud 服务注册中的nacos实现过程
如下图,org.springframework.cloud.spring-cloud-commons
包下定义了一系列接口,其中就包括serviceregistry
的系列规范,并通过SPI机制去调用接口实现。
文章图片
在该包的META-INF/spring.factories
文件中,可以找到EnableAutoConfiguration.class
为key的value中有AutoServiceRegistrationAutoConfiguration.class
这一项。
文章图片
来看看这个AutoServiceRegistrationAutoConfiguration
配置类:
文章图片
对应的,在com.alibaba.cloud.nacos
包下(位于spring-cloud-starter-nacos-discovery jar包中)的META-INF/spring.fatories
有个nacos服务注册配置类,如下图:
文章图片
这个NacosServiceRegistryAutoConfiguration
配置类就定义了上面SpringCloud的AutoServiceRegistration
接口的实现类:
package com.alibaba.cloud.nacos.registry; .../** * @author xiaojing * @author Mercy */@Configuration(proxyBeanMethods = false)@EnableConfigurationProperties@ConditionalOnNacosDiscoveryEnabled@ConditionalOnProperty(value = "https://www.it610.com/article/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> registrationCustomizers,NacosDiscoveryProperties nacosDiscoveryProperties,ApplicationContext context) {return new NacosRegistration(registrationCustomizers.getIfAvailable(),nacosDiscoveryProperties, context); } /**** 这里,这个NacosAutoServiceRegistration就是AutoServiceRegistration接口的实现类 **/ @Bean @ConditionalOnBean(AutoServiceRegistrationProperties.class) public NacosAutoServiceRegistration nacosAutoServiceRegistration(NacosServiceRegistry registry,AutoServiceRegistrationProperties autoServiceRegistrationProperties,NacosRegistration registration) {return new NacosAutoServiceRegistration(registry,autoServiceRegistrationProperties, registration); }}
文章图片
NacosAutoServiceRegistration
中的register()
方法开始注册服务,整个调用流程为:文章图片
继续追根溯源,这个
registry()
方法是在AbstractAutoServiceRegistration implements ApplicationListener
类的onApplicationEvent()
方法(onApplicationEvent->bind->start->registey) 。调用的心跳默认5秒一次,具体可参考
BeatReactor
类中的buildBeatInfo()
方法,其中有个beatInfo.setPeriod(instance.getInstanceHeartBeatInterval());
这里获取到一个常量5s。更加详细的流程可以参考:源码阅读|年轻人可以不讲武德,但是你得会阅读Naocs源码
另外上面最后一步的
NamingClientProxy
接口的实现如下,利用到了委托模式(delegate)也叫代理模式?:文章图片
【SpringCloud|SpringCloud 服务注册中的nacos实现过程】到此这篇关于SpringCloud 服务注册中的nacos实现过程的文章就介绍到这了,更多相关SpringCloud 服务注册nacos内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 学习笔记(带你十天轻松搞定 Go 微服务系列(二))
- 学习笔记(带你十天轻松搞定 Go 微服务系列(一))
- Protocol|【PCIe页请求服务】到底到底到底是啥(半年搜遍全网找不到一篇介绍文章,没人写那我来写吧)
- #|PCIe地址转换服务(ATS)详解
- 计算机主机分为什么不同,什么是服务器(服务器和计算机主机之间的区别)
- Linux杂谈|Linux杂谈 | (3) 在Linux服务器上安装Anaconda
- 服务器是什么系统_三大操作系统比较,为什么服务器都推荐linux系统()
- Linux杂谈 | (7) 查看Linux服务器各种相关信息
- 为什么服务器端都使用Linux系统
- 1000道程序员常见问题解析|高防服务器为什么使用Linux系统(服务器使用Linux系统的好处是?)