Nacos源码 (7) Nacos与Spring

打印 上一主题 下一主题

主题 922|帖子 922|积分 2766

SpringCloud工程可以使用Nacos作为注册中心和配置中心,配置和使用非常简单,本文将简单介绍使用方式,并分析其实现方式。
SpringCloud工程集成Nacos

SpringCloud工程使用Nacos非常简单,只需要引入依赖、编写配置参数、在启动类上添加注解即可。
引入依赖
  1. <dependencyManagement>
  2.   <dependencies>
  3.    
  4.     <dependency>
  5.       <groupId>org.springframework.cloud</groupId>
  6.       <artifactId>spring-cloud-dependencies</artifactId>
  7.       <version>Hoxton.SR9</version>
  8.       <type>pom</type>
  9.       <scope>import</scope>
  10.     </dependency>
  11.    
  12.     <dependency>
  13.       <groupId>com.alibaba.cloud</groupId>
  14.       <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  15.       <version>2.2.5.RELEASE</version>
  16.       <type>pom</type>
  17.       <scope>import</scope>
  18.     </dependency>
  19.   </dependencies>
  20. </dependencyManagement>
  21. <dependencies>
  22.   
  23.   <dependency>
  24.     <groupId>com.alibaba.cloud</groupId>
  25.     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  26.   </dependency>
  27.   <dependency>
  28.     <groupId>com.alibaba.cloud</groupId>
  29.     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  30.   </dependency>
  31. </dependencies>
复制代码
bootstrap.yml配置文件
  1. spring:
  2.   application:
  3.     name: xx-service
  4.   profiles:
  5.     active: dev
  6.   cloud:
  7.     nacos:
  8.       discovery:
  9.         server-addr: localhost:8848
  10.       config:
  11.         prefix: ${spring.application.name}
  12.         file-extension: yml
  13.         group: DEFAULT_GROUP
  14.         server-addr: localhost:8848
  15.         extension-configs:
  16.           - data-id: base-config-${spring.profiles.active}.yml
  17.             group: DEFAULT_GROUP
  18.             refresh: true
  19.           - data-id: resource-config-${spring.profiles.active}.yml
  20.             group: DEFAULT_GROUP
  21.             refresh: true
复制代码
配置中心源码分析

配置中心集成的源码在spring-cloud-starter-alibaba-nacos-config工程中。
spring.factories文件
  1. # Configuration配置类
  2. org.springframework.cloud.bootstrap.BootstrapConfiguration=\
  3. com.alibaba.cloud.nacos.NacosConfigBootstrapConfiguration
  4. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  5. com.alibaba.cloud.nacos.NacosConfigAutoConfiguration,\
  6. com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration
  7. org.springframework.boot.diagnostics.FailureAnalyzer=\
  8. com.alibaba.cloud.nacos.diagnostics.analyzer.NacosConnectionFailureAnalyzer
  9. # 这里是Nacos扩展的支持json和xml的PropertySourceLoader
  10. org.springframework.boot.env.PropertySourceLoader=\
  11. com.alibaba.cloud.nacos.parser.NacosJsonPropertySourceLoader,\
  12. 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文件
  1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  2.   com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration,\
  3.   com.alibaba.cloud.nacos.ribbon.RibbonNacosAutoConfiguration,\
  4.   com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
  5.   com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\
  6.   com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\
  7.   com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration,\
  8.   com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration,\
  9.   com.alibaba.cloud.nacos.NacosServiceAutoConfiguration
  10. org.springframework.cloud.bootstrap.BootstrapConfiguration=\
  11.   com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration
复制代码
NacosDiscoveryClientConfigServiceBootstrapConfiguration

import了几个其他的配置类:

  • NacosDiscoveryAutoConfiguration.class
  • NacosServiceAutoConfiguration.class
  • NacosDiscoveryClientConfiguration.class
  • NacosReactiveDiscoveryClientConfiguration.class
NacosDiscoveryAutoConfiguration

装配NacosDiscoveryProperties、NacosServiceDiscovery组件。
NacosServiceDiscovery类:用于获取注册中心的服务和实例。
RibbonNacosAutoConfiguration
  1. @Configuration(proxyBeanMethods = false)
  2. @EnableConfigurationProperties
  3. @ConditionalOnBean(SpringClientFactory.class)
  4. @ConditionalOnRibbonNacos
  5. @ConditionalOnNacosDiscoveryEnabled
  6. @AutoConfigureAfter(RibbonAutoConfiguration.class)
  7. // 使用NacosRibbonClientConfiguration装配NacosServerList
  8. // NacosServerList用于获取注册到Nacos上的指定service的服务实例列表
  9. @RibbonClients(defaultConfiguration = NacosRibbonClientConfiguration.class)
  10. public class RibbonNacosAutoConfiguration {
  11. }
复制代码
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组件。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

络腮胡菲菲

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表