• Nacos源码 (7) Nacos与Spring


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

    SpringCloud工程集成Nacos

    SpringCloud工程使用Nacos非常简单,只需要引入依赖、编写配置参数、在启动类上添加注解即可。

    引入依赖

    <dependencyManagement>
      <dependencies>
        
        <dependency>
          <groupId>org.springframework.cloudgroupId>
          <artifactId>spring-cloud-dependenciesartifactId>
          <version>Hoxton.SR9version>
          <type>pomtype>
          <scope>importscope>
        dependency>
        
        <dependency>
          <groupId>com.alibaba.cloudgroupId>
          <artifactId>spring-cloud-alibaba-dependenciesartifactId>
          <version>2.2.5.RELEASEversion>
          <type>pomtype>
          <scope>importscope>
        dependency>
      dependencies>
    dependencyManagement>
    
    <dependencies>
      
      <dependency>
        <groupId>com.alibaba.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
      dependency>
      <dependency>
        <groupId>com.alibaba.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
      dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    配置中心源码分析

    配置中心集成的源码在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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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 {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    RibbonClients注解导入RibbonClientConfigurationRegistrar类,支持组合多个RibbonClient注解。

    RibbonClientConfigurationRegistrar类会解析RibbonClients和RibbonClient注解,将相关配置类注入到registry中。

    NacosDiscoveryEndpointAutoConfiguration

    装配NacosDiscoveryEndpoint和NacosDiscoveryHealthIndicator组件:

    • NacosDiscoveryEndpoint - 用于获取Nacos配置参数和订阅的服务
    • NacosDiscoveryHealthIndicator - 健康检查

    NacosServiceRegistryAutoConfiguration

    装配以下组件:

    • NacosServiceRegistry

      实现了ServiceRegistry接口,用于服务注册、服务下线

    • NacosRegistration

      封装服务实例信息:instanceId、serviceId、host、port和metadata等信息

    • NacosAutoServiceRegistration

      1. 将服务注册到Nacos注册中心,内部维护NacosServiceRegistry和NacosRegistration组件
      2. 继承了AbstractAutoServiceRegistration抽象类,其register用于注册服务
      3. AbstractAutoServiceRegistration实现了ApplicationListener接口,监听WebServerInitializedEvent事件,在事件发生时做服务注册

    NacosDiscoveryClientConfiguration

    装配NacosDiscoveryClient和NacosWatch组件。

  • 相关阅读:
    [SWPUCTF 2018]SimplePHP
    一篇博客学会系列(1) —— C语言中所有字符串函数以及内存函数的使用和注意事项
    中小企业如何做网络安全? 避免这 8 个容易被黑客利用的基本错误
    9月9日,每日信息差
    如果用nodejs开发一个网站
    Chinese ​(Simplified)​ Language Pack / 中文语言包插件
    【数学建模】图论模型(基础理论+最大流与最小费用流问题)
    OTA设计思路
    面向对象设计模式
    springboot实现发送邮箱验证码
  • 原文地址:https://blog.csdn.net/xuguofeng2016/article/details/133853325