配置中心Nacos

作者: 勤_ | 来源:发表于2021-08-20 11:16 被阅读0次

    概述

    传统的静态配置方式要想修改某个配置只能修改之后重新发布应用。如果要实现动态性,也可以选择使用数据库存储配置,通过定时轮询访问数据库来感知配置的变化。轮询频率低感知配置变化的延时就长,轮询频率高,感知配置变化的延时就短,但比较损耗性能,需要在实时性和性能之间做折中。配置中心专门针对这个业务场景,兼顾实时性和一致性来管理动态配置。同时配置的权限管控、灰度发布、版本管理、格式检验和安全配置等一系列的配置管理相关的特性也是配置中心不可获取的一部分。

    配置中心是对传统配置管理服务的一种抽象。接下来我们来了解下的nacos2.x版本结合springcloud 2020.0.1版本的使用。

    1531319755930-0040e67e-ca05-47b9-9cd0-07ffd7452eae.png

    依赖的框架以及版本

    工具 版本
    spring-boot 2.4.2
    spring-cloud 2020.0.1
    Spring Cloud Alibaba 2021.1
    nacos 2.0.3
    nacos-client 2.0.3

    实现步骤

    1,nacos-server服务器添加配置,增加配置useLocalCache=false

    image-20210820104416463.png

    2,添加依赖

    <properties>
       <java.version>1.8</java.version>
       <spring-cloud.version>2020.0.1</spring-cloud.version>
       <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
    </properties>
    <dependencies>
       ......
    
       <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
          <exclusions>
             <exclusion>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
             </exclusion>
          </exclusions>
       </dependency>
    
       <dependency>
          <groupId>com.alibaba.nacos</groupId>
          <artifactId>nacos-client</artifactId>
          <version>2.0.3</version>
       </dependency>
    
       <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-loadbalancer</artifactId>
       </dependency>
    </dependencies>
    <dependencyManagement>
       <dependencies>
          <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-dependencies</artifactId>
             <version>${spring-cloud.version}</version>
             <type>pom</type>
             <scope>import</scope>
          </dependency>
          <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-alibaba-dependencies</artifactId>
             <version>${spring-cloud-alibaba.version}</version>
             <type>pom</type>
             <scope>import</scope>
          </dependency>
       </dependencies>
    </dependencyManagement>
    

    3,新增配置bootstrap.yaml并启动服务,注意这里不能放到application.yaml文件中去。

    spring:
      application:
        name: gateway
    .....
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
            namespace: xx
          config:
            server-addr: 127.0.0.1:8848
            file-extension: properties
            group: DEFAULT_GROUP
            namespace: xx
    

    4,请求访问.

    image-20210820104756707.png

    5,动态刷新配置,这里是结合@RefreshScope和@Value注解,借用spring cloud context 的ConfigDataContextRefresher去刷新配置。

    @RestController
    @RequestMapping("/config")
    @RefreshScope
    public class ConfigController {
    
        @Value("${useLocalCache:false}")
        private boolean useLocalCache;
    
        @RequestMapping("/get")
        public boolean get() {
            return useLocalCache;
        }
    }
    
    • 修改nacos-server上的配置

      image-20210820105342684.png
    • 应用会打印如下日志:

      2021-08-20 10:51:40.041 INFO 24440 --- [ternal.notifier] o.s.c.e.event.RefreshEventListener : Refresh keys changed: [useLocalCache]

    • 重新请求获取配置

      image-20210820105334971.png

    关键源码

    nacos-config-源码分析.jpg

    除了上述官网给出的核心接口或类外,我们还要注意他的初始化类NacosConfigBootstrapConfiguration、NacosConfigAutoConfiguration等。

    异常报错

    1,动态刷新配置只有spring.cloud.bootstrap.enabled,RefreshEventListener : Refresh keys changed: [spring.cloud.bootstrap.enabled],动态刷新失败。

    解决方法:将项目的配置定义到bootstrap.yaml。

    spring:
      application:
        name: gateway
    

    2,集成springcloud后发现无法获取nacos上的配置,这主要是springcloud当前版本将一些默认启动的配置全部关闭了,导致nacos的NacosConfigBootstrapConfiguration没有初始化。根据spring cloud版本变化需要添加如下依赖:

    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>
    

    参考

    spring cloud 2020.0.1版本变化
    nacos
    例子

    相关文章

      网友评论

        本文标题:配置中心Nacos

        本文链接:https://www.haomeiwen.com/subject/iyqtiltx.html