zoukankan      html  css  js  c++  java
  • Spring Cloud Alibaba之nacos 配置中心使用

    前言 nacos的功能回顾

    Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

    Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

    nacos是ali开源的微服务注册中心,其实也是配置中心,详细说明参见:https://nacos.io/zh-cn/docs/what-is-nacos.html。

    上一篇中搭建好nacos后,这一篇,学习使用nacos来进行配置中心的功能学习。

    一  在项目使用nacos做为配置中心。

    Nacos提供用于存储配置和其他元数据功能,为分布式系统中的外部化配置提供服务器端和客户端支持,使用Spring Cloud Alibaba Nacos Config就可以在Nacos Server集中管理Spring Cloud应用的外部属性配置;

    Spring Cloud Alibaba Nacos config是在启动的bootstrap阶段,将配置加载到Spring环境中;

    Spring Cloud Alibaba Nacos Config使用DataId和GROUP确定一个配置;

     1 # bootstrap.properties 文件的配置信息
     2 #测试 用nacos作为配置中心时的配置信息
     3 spring.application.name= alibabacloud_order_consumer
     4 
     5 # 服务注册与服务发现
     6 spring.cloud.nacos.discovery.server-addr=192.168.162.2:8848
     7 spring.cloud.nacos.discovery.username=nacos
     8 spring.cloud.nacos.username=nacos
     9 spring.cloud.nacos.password=nacos
    10 
    11 spring.cloud.nacos.config.server-addr=192.168.162.2:8848
    12 #千万要注意,这个配置节点,nacos config dataId name.
    13 spring.cloud.nacos.config.name=nacos
    14 spring.cloud.nacos.config.password=nacos
    15 
    16 spring.cloud.nacos.config.file-extension=properties

    注意:

    spring.cloud.nacos.discovery.username=nacos
    spring.cloud.nacos.username=nacos
    这两个配置其实指的都是连接nacos使用的用户名和密码,在启动nacos的默认是这两个值。可以通过源代码跟踪找到。

    #千万要注意,这个配置节点,nacos config dataId name.
    spring.cloud.nacos.config.name=nacos
    而这个就要特别注意了,如果配置了这个,这个表示的是:nacos config dataId,例如,这里写nacos的话,那么在nacos中的配置,就是这样的。这是需要特别注意的地方,当然也可以通过源码看到,配置注释的。实现中特别容易搞错。

    二  nacos中的配置信息是基于命名空间和group隔离的

    启动好Nacos之后,在Nacos添加如下的配置:

    Data ID: nacos  这里如果不写后缀,那么默认为.properties结尾

    Group : DEFAULT_GROUP

    配置格式: Properties 

    配置内容:

    user.name=zhangsan 

    user.age=18

    DataId是以.properties为扩展名(默认的文件扩展名方式就是.properties);

    在运行时必须使用 bootstrap.properties配置文件配置nacos server地址,同时,spring.application.name值必须与Nacos中配置的Data Id匹配(除了.properties或者.yaml后缀);

    DataId默认使用`spring.application.name`配置跟文件扩展名结合(配置格式默认使用.properties),GROUP不配置默认使用DEFAULT_GROUP;

    注意当你使用域名的方式来访问Nacos时,

    spring.cloud.nacos.config.server-addr 配置的方式为 域名:port,例如 Nacos的域名为nacos.power.com,监听的端口为80,

     spring.cloud.nacos.config.server-addr=nacos.xxx.com:80,注意80 端口不能省略;

    如果要在项目中使用Nacos来实现应用的外部化配置,需要添加如下依赖:

    <dependency>

        <groupId>com.alibaba.cloud</groupId>

        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

    </dependency>

    三  Nacos Config配置中心动态刷新原理分析

    Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher的refresh 方法;

    可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新

    四  多环境支持

    a) Nacos Config 除了支持.properties格式以外,也支持yaml格式,这个时候只需要完成以下两步:

    1、在应用的bootstrap.properties配置文件中显式地声明DataId文件扩展名;bootstrap.properties文件配置如下:

    应用配置:spring.cloud.nacos.config.file-extension=yml

    2、在Nacos的web管控台新增一个DataId为yaml扩展名的配置,如下所示:

    Data ID:       nacos.yml

    Group  :       DEFAULT_GROUP

    配置格式:        YAML或者yml

    配置内容:        aa.name: yml-name

                           aa.age: 100

     这里需要注意的是:

    1. 如果在程序中有指定了读取的 config dataid,例如:  spring.cloud.nacos.config.name=nacos   那么将会读取  nacos.yml的配置节的信息

    2. 如果没有指定读取的dataid,那么默认是读取的是微服务名相头的.yml配置节的信息,实现测试中正是如此。

    b) 基于profile粒度的多环境配置

    spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以 dataid 为 ${spring.application.name}.${file-extension:properties} 为的基础配置还加载了dataid为 

    ${spring.application.name}-${profile}.${file-extension:properties} 的基础配置;

    在日常开发中如果遇到多套环境下的不同配置,可以通过Spring提供的 ${spring.profiles.active} 配置项来激活使用某个配置文件;

    spring.profiles.active=develop

    ${spring.profiles.active}当通过配置文件来指定时必须放在 bootstrap.properties文件中

    比如在Nacos上新增一个dataid为:nacos-config-dev.yaml的基础配置,如下所示:

    Data ID:        nacos-config-deve.yaml

    Group  :        DEFAULT_GROUP

    配置格式:        YAML

    配置内容:        current.env: dev-env

    启动 Spring Boot 应用测试;

    如果需要切换到生产环境,只需要更改 ${spring.profiles.active} 参数配置即可,如下所示:

    spring.profiles.active=product

    实验效果如下:

     

     五  遇到的一些问题

    1. 如果我们在 bootstrap.properties/yml和application.properties/yml里面都配置了,spring.application.name= alibabacloud-order-consumer ,那么最终注册的服务名以  application.properties/yml 里面的配置为准,决定了读到nacos中默认的dataid也是这个决定的。

    2. 尝试将  spring.application.name= alibabacloud-order-consumer 配置成有使用中横杠时,发现多环境配置,不受影响,与网上很多说无法读取的情况不会出现。可以正常读取。

    六  总结

    1. nacos作为配置中心,时,需要在bootstrap.yml中配置读取的配置信息 如节点,环境配置,

    2. 默认读取的是:dataid 为 ${spring.application.name}.${file-extension:properties} 的nacos中配置的信息。

    3. 当我们指定读取的命令空间,多环境时,那么读取的配置信息为:dataid 为 ${spring.application.name}-{profile}.${file-extension:properties} 如果要读取yml的文件配置信息,则还需要指定一下读取的配置的扩展名为yml,即:

    spring.cloud.nacos.config.file-extension=yaml

    半斤八两开始写BLOG了
  • 相关阅读:
    Openstack API 开发 快速入门
    virtualBox虚拟机到vmware虚拟机转换
    使用Blogilo 发布博客到cnblogs
    Openstack Troubleshooting
    hdoj 1051 Wooden Sticks(上升子序列个数问题)
    sdut 2430 pillars (dp)
    hdoj 1058 Humble Numbers(dp)
    uva 10815 Andy's First Dictionary(快排、字符串)
    sdut 2317 Homogeneous squares
    hdoj 1025 Constructing Roads In JGShining's Kingdom(最长上升子序列+二分)
  • 原文地址:https://www.cnblogs.com/freewsf/p/15439309.html
Copyright © 2011-2022 走看看