在分布式服务中,原来的单体服务会被拆分成一个个微服务,服务注册实例到注册中心,服务消费者通过注册中心获取实例列表,直接请求调用服务。
服务是如何注册到注册中心,服务如果挂了,服务是如何检测?带着这些问题,我们从源码上对服务注册进行简单的源码分析。
版本 2.1.1
Nacos Server:2.1.1
spring-cloud-starter-alibaba:2.1.1.RELEASE
spring-boot:2.1.1.RELEASE
方便统一版本,客户端和服务端版本号都为
2.1.1
。
客户端
启动nacos
服务注册和发现需要添加maven
依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${latest.version}</version>
</dependency>
复制代码
根据maven
依赖找到对应的spring.factories
文件:
在spring.factories
文件里找到启动配置类信息,SpringBoot
服务启动时会将这些配置类信息注入到bean
容器中。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration,\
com.alibaba.cloud.nacos.ribbon.RibbonNacosAutoConfiguration,\
com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration,\
com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration
复制代码
服务注册的核心配置类为:NacosDiscoveryAutoConfiguration
,该类配置三个bean
对象:
NacosServiceRegistry
NacosRegistration
NacosAutoServiceRegistration
NacosAutoServiceRegistration
NacosAutoServiceRegistration
继承了抽象类AbstractAutoServiceRegistration
。AbstractAutoServiceRegistration
抽象类又实现了ApplicationListener
接口。
实现ApplicationListener
接口的方法,会在Spring
容器初始化完成之后调用onApplicationEvent
方法:<