SpringCloud工程可以使用Nacos作为注册中心和配置中心,配置和使用非常简单,本文将简单介绍使用方式,并分析其实现方式。
SpringCloud工程集成Nacos
SpringCloud工程使用Nacos非常简单,只需要引入依赖、编写配置参数、在启动类上添加注解即可。
引入依赖
- <dependencyManagement>
- <dependencies>
-
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>Hoxton.SR9</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
-
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-alibaba-dependencies</artifactId>
- <version>2.2.5.RELEASE</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
- <dependencies>
-
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- </dependency>
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
- </dependency>
- </dependencies>
复制代码 bootstrap.yml配置文件
- spring:
- application:
- name: xx-service
- profiles:
- active: dev
- cloud:
- nacos:
- discovery:
- server-addr: localhost:8848
- config:
- prefix: ${spring.application.name}
- file-extension: yml
- group: DEFAULT_GROUP
- server-addr: localhost:8848
- extension-configs:
- - data-id: base-config-${spring.profiles.active}.yml
- group: DEFAULT_GROUP
- refresh: true
- - data-id: resource-config-${spring.profiles.active}.yml
- group: DEFAULT_GROUP
- refresh: true
复制代码 配置中心源码分析
配置中心集成的源码在spring-cloud-starter-alibaba-nacos-config工程中。
spring.factories文件
- # Configuration配置类
- org.springframework.cloud.bootstrap.BootstrapConfiguration=\
- com.alibaba.cloud.nacos.NacosConfigBootstrapConfiguration
- org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
- com.alibaba.cloud.nacos.NacosConfigAutoConfiguration,\
- com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration
- org.springframework.boot.diagnostics.FailureAnalyzer=\
- com.alibaba.cloud.nacos.diagnostics.analyzer.NacosConnectionFailureAnalyzer
- # 这里是Nacos扩展的支持json和xml的PropertySourceLoader
- org.springframework.boot.env.PropertySourceLoader=\
- com.alibaba.cloud.nacos.parser.NacosJsonPropertySourceLoader,\
- com.alibaba.cloud.nacos.parser.NacosXmlPropertySourceLoader
复制代码 NacosConfigBootstrapConfiguration
装配NacosConfigProperties、NacosConfigManager、NacosPropertySourceLocator等组件:
- NacosConfigProperties - 封装spring.cloud.nacos.config配置参数
- NacosConfigManager - 用于获取ConfigService对象
- NacosPropertySourceLocator - 用于加载配置封装PropertySource
注册中心源码分析
注册中心集成的源码在spring-cloud-starter-alibaba-nacos-discovery工程中。
spring.factories文件
- org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
- com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration,\
- com.alibaba.cloud.nacos.ribbon.RibbonNacosAutoConfiguration,\
- com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
- com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\
- com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\
- com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration,\
- com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration,\
- com.alibaba.cloud.nacos.NacosServiceAutoConfiguration
- org.springframework.cloud.bootstrap.BootstrapConfiguration=\
- com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration
复制代码 NacosDiscoveryClientConfigServiceBootstrapConfiguration
import了几个其他的配置类:
- NacosDiscoveryAutoConfiguration.class
- NacosServiceAutoConfiguration.class
- NacosDiscoveryClientConfiguration.class
- NacosReactiveDiscoveryClientConfiguration.class
NacosDiscoveryAutoConfiguration
装配NacosDiscoveryProperties、NacosServiceDiscovery组件。
NacosServiceDiscovery类:用于获取注册中心的服务和实例。
RibbonNacosAutoConfiguration
- @Configuration(proxyBeanMethods = false)
- @EnableConfigurationProperties
- @ConditionalOnBean(SpringClientFactory.class)
- @ConditionalOnRibbonNacos
- @ConditionalOnNacosDiscoveryEnabled
- @AutoConfigureAfter(RibbonAutoConfiguration.class)
- // 使用NacosRibbonClientConfiguration装配NacosServerList
- // NacosServerList用于获取注册到Nacos上的指定service的服务实例列表
- @RibbonClients(defaultConfiguration = NacosRibbonClientConfiguration.class)
- public class RibbonNacosAutoConfiguration {
- }
复制代码 RibbonClients注解导入RibbonClientConfigurationRegistrar类,支持组合多个RibbonClient注解。
RibbonClientConfigurationRegistrar类会解析RibbonClients和RibbonClient注解,将相关配置类注入到registry中。
NacosDiscoveryEndpointAutoConfiguration
装配NacosDiscoveryEndpoint和NacosDiscoveryHealthIndicator组件:
- NacosDiscoveryEndpoint - 用于获取Nacos配置参数和订阅的服务
- NacosDiscoveryHealthIndicator - 健康检查
NacosServiceRegistryAutoConfiguration
装配以下组件:
- NacosServiceRegistry
实现了ServiceRegistry接口,用于服务注册、服务下线
- NacosRegistration
封装服务实例信息:instanceId、serviceId、host、port和metadata等信息
- NacosAutoServiceRegistration
- 将服务注册到Nacos注册中心,内部维护NacosServiceRegistry和NacosRegistration组件
- 继承了AbstractAutoServiceRegistration抽象类,其register用于注册服务
- AbstractAutoServiceRegistration实现了ApplicationListener接口,监听WebServerInitializedEvent事件,在事件发生时做服务注册
NacosDiscoveryClientConfiguration
装配NacosDiscoveryClient和NacosWatch组件。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |