• 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了
  • 相关阅读:
    当前网页调用其他网页
    保护自己的网页不被放入框架
    保护网页源码
    页面的后退、刷新、前进
    妙味——拖拽+碰撞+重力
    运行代码
    妙味——弹性运动
    IE css bug及解决方案参考
    妙味——布局转换的应用
    [LeetCode][JavaScript]Count Complete Tree Nodes
  • 原文地址:https://www.cnblogs.com/freewsf/p/15439309.html
Copyright © 2020-2023  润新知