zoukankan      html  css  js  c++  java
  • Nacos配置中心使用

      在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。

     

      如果微服务架构中没有使用统一配置中心时,所存在的问题:

    • 配置文件分散在各个项目里,不方便维护

    • 配置内容安全与权限

    • 更新配置后,项目需要重启

     

      nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动

     

        

        

      nacosSpring Cloud的整合:

      1.在 Nacos Spring Cloud 中,dataId 的完整格式如下:

    ${prefix}-${spring.profile.active}.${file-extension}
    • prefix 默认为所属工程配置spring.application.name 的值(即:nacos-provider),也可以通过配置项 spring.cloud.nacos.config.prefix来配置;

    • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

    • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型;默认为 properties ;

      

       

      即 dataId 为 配置所属工程的spring.application.name的值 + "." + properties/yml;

      官方文档:

      https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

      https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

       

      2.配置内容:

      项目中易变的内容

    • 从配置中心读取配置

      添加依赖:

     <dependency>
    	<groupId>com.alibaba.cloud</groupId>
    	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    	<version>2.1.2.RELEASE</version>
    </dependency>
    

      版本说明 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

     

      

      bootstrap.yml中配置 Nacos server 的地址和应用名

    spring:
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848
      # 该配置影响统一配置中心中的dataId,之前已经配置过
      application:
        name: nacos-provider
    

      注意:bootstrap.yml添加了spring.application.name,在appliation.yml不需要再添加;

      之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。在springboot工程中,bootstrap.properties的加载优先级更高

      

    @RefreshScope
    @RestController
    public class ProviderController {
    
        @Value("${DevConfig}")
        private String devConfig;
    
        @GetMapping("invoke")
        public String invoke() {
            return LocalTime.now() + " invoke,devConfig:" + devConfig;
        }
    }
    

      

      

      调用结果:

      

    • 名称空间切换环境

      在实际开发中,通常有多套不同的环境(默认只有public),那么这个时候可以根据指定的环境来创建不同的 namespce,例如,开发、测试和生产三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。以此来实现多环境的隔离;

      

      可以发现有四个名称空间:public(默认)以及我们自己添加的3个名称空间(prod、dev、test),可以点击查看每个名称空间下的配置文件,当然现在只有public下有一个配置。

      默认情况下,项目会到public下找 服务名.properties文件。

      接下来,在dev名称空间中也添加一个nacos-provider.properties配置。这时有两种方式:

    1. 切换到dev名称空间,添加一个新的配置文件。缺点:每个环境都要重复配置类似的项目

    2. 直接通过clone方式添加配置,并修改即可(推荐)

      

       编辑

        

      在服务提供方nacos-provider中切换命名空间,修改bootstrap.yml添加如下配置

    spring:
      cloud:
        nacos:
          config:
            namespace: 288ad42c-c8e0-4b92-b8df-7d7883ad8507
    

      

       namespace的值为:

        

      

       重启服务,调用结果:

      

    • 回滚配置

      

      

    • 加载多配置文件

      偶尔情况下需要加载多个配置文件。假如现在dev名称空间下有三个配置文件:nacos-provider.properties、redis.properties、jdbc.properties

     

      

      

        

      

      nacos-provider.properties默认加载,怎么加载另外两个配置文件?

      在bootstrap.yml文件中添加如下配置:

    spring:
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848
          config:
            extension-configs:
              - refresh: true
                data-id: redis.properties
              - refresh: true
                data-id: jdbc.properties
    

      

      修改上面的代码:

    @RefreshScope
    @RestController
    public class ProviderController {
    
        @Value("${DevConfig}")
        private String devConfig;
    
        @Value("${jdbc.url}")
        private String jdbcUrl;
    
        @Value("${redis.url}")
        private String redisUrl;
    
        @GetMapping("invoke")
        public String invoke() {
            return LocalTime.now() + " invoke,devConfig:" + devConfig +
                    ",jdbcUrl:" + jdbcUrl + ",redisUrl:" + redisUrl;
        }
    }
    

      

      

    • 配置的分组

      在实际开发中,除了不同的环境外。不同的微服务或者业务功能,可能有不同的redis及mysql数据库,也就说每个微服务项目可能会有相应的开发环境,测试环境,预发环境,生产环境等;

      区分不同的环境我们使用名称空间(namespace),区分不同的微服务或功能,使用分组(group)

      也可以反过来使用,名称空间和分组只是为了更好的区分配置,提供的两个维度而已;

      

      新增一个redis.properties,所属分组为nacos-provider:

      

      

      现在开发环境中有两个redis.propertis配置文件,一个是默认分组(DEFAULT_GROUP),一个是provider组

      默认情况下从DEFAULT_GROUP分组中读取redis.properties,如果要切换到nacos-provider分组下的redis.properties,需要修改如下配置:

    spring:
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848
          config:
            extension-configs:
              - refresh: true
                group: nacos-provider
                data-id: redis.properties
              - refresh: true
                data-id: jdbc.properties    
    

      

     

      

  • 相关阅读:
    windows服务创建与管理
    html前端技术:??
    C#整数三种强制类型转换int、Convert.ToInt32()、int.Parse()的区别
    convert转化成特定日期格式
    关于android性能,内存优化(转载)
    不错的Android博客
    十步优化SQL Server中的数据访问(转载)
    数据库SQL优化大总结之 百万级数据库优化方案(转载)
    SQL Server数据库性能优化之SQL语句篇(转载)
    50种方法优化SQL Server数据库查询(转载)
  • 原文地址:https://www.cnblogs.com/coder-zyc/p/12821932.html
Copyright © 2011-2022 走看看