ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

真香系列:聊聊SpringCloud Nacos服务配置中心

2021-06-10 17:53:01  阅读:171  来源: 互联网

标签:真香 SpringCloud 配置 Nacos nacos yaml spring config


本篇要点
  • 介绍Nacos作为服务配置中心的案例。
  • 介绍namespace、group、DataId三种方案的配置读取。
Nacos服务配置中心之基础配置 新建模块

新建:cloudalibaba-config-nacos-client3377,引入依赖:

        <!--nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
配置bootstrap.yml

Nacos和Spring Cloud config一样,在项目初始化的时候,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。

另外,SpringBoot中配置文件的加载,bootstrap.yml优先于application.yml

# nacos配置
server:
  port: 3377

spring:
  application:
    name: nacos-config-client # 构成 Nacos 配置管理 dataId字段的一部分
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置

配置之后,3377服务将从localhost:8848上读取后缀名为yaml的配置文件。

配置application.yml
spring:
  profiles:
    active: dev #表示开发环境
主启动类
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}
服务接口
@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}
dataId的完整格式及新建配置

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

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml类型。

综上所述,按照我们的配置,最后的dataId结果应该为:

nacos-config-client-dev.yaml

我们选中配置列表,选择新建配置,DataID就是我们刚刚得到的nacos-config-client-dev.yaml。

真香系列:聊聊SpringCloud Nacos服务配置中心

 

新建配置完成之后是这样:

真香系列:聊聊SpringCloud Nacos服务配置中心

 

测试

运行3377服务,调用接口

http://localhost:3377/config/info

测试配置读取是否成功。

另外,它支持动态刷新,当我们修改手动修改配置中心数据时,修改的配置会被动态刷新,自动读取。

Nacos服务配置中心之分类配置 解决问题
  1. 实际开发中,一个系统会准备多个环境,如dev开发环境,test测试环境,prod生产环境等,如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件?
  2. 一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目都会有相应的开发环境、测试环境等,如何管理这些微服务配置呢?
命名空间、DataId和Group的关系

Namespace默认为空串,公共命名空间(public),分组默认是DEFAULT_GROUP。

真香系列:聊聊SpringCloud Nacos服务配置中心

 

Nacos的数据模型如下:

真香系列:聊聊SpringCloud Nacos服务配置中心

 

namespace用于区分部署环境【开发、测试、生产】,创建三个不同的namespace相互隔离。

Group可以把不同的微服务划分到同一个分组中。

Service可以包含多个Cluster集群,Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。

Instance是微服务的实例。

三种方案的加载配置 Data Id的方案

保证命名空间相同,分组相同,只有Data Id不同

指定spring.profile.active和配置文件的DataId来使不同环境下读取不同的配置。为了演示这个效果,我们总共新建以下两个配置,保证它们命名空间相同,分组相同,只有Data Id不同:

nacos-config-client-dev.yaml
nacos-config-client-test.yaml

真香系列:聊聊SpringCloud Nacos服务配置中心

 

通过spring.profile.active属性就能进行多环境下配置文件的读取,刚刚已经测试过dev环境,我们测试一下test环境,是否能够读取到:nacos-config-client-test.yaml的配置呢,答案是肯定的,可以访问:http://localhost:3377/config/info测试一下。

spring:
  profles:
    active: test #表示测试环境
Group方案

保证命名空间相同,Data Id相同,只有分组不同

真香系列:聊聊SpringCloud Nacos服务配置中心

 

注意,这里我们需要在application.yml中指定profile为info,在bootstrap.yml指定group。

## bootstrap.yml
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: DEV_GROUP
## application.yml
spring:
  profiles:
    active: info

测试方法不用多说,在TEST_GROUP和DEV_GROUP之间切换,再访问接口即可。

namespace方案

保证命名空间不同

新建两个命名空间:dev和test。

真香系列:聊聊SpringCloud Nacos服务配置中心

 

如果需要指定命名空间,则指定yml中的namespace属性即可。

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: TEST_GROUP
        namespace: 43d2f092-e338-4d31-b797-77466bdd8c8f
        
spring:
  profiles:
    active: dev #表示开发环境

将会从命名空间ID为43d2f092-e338-4d31-b797-77466bdd8c8f的TEST_GROUP组中,读取nacos-config-client-dev的配置文件。

如果觉得本文对你有帮助,可以点赞关注支持一下,也可以关注我公众号,上面有更多技术干货文章以及相关资料共享,大家一起学习进步!

 

标签:真香,SpringCloud,配置,Nacos,nacos,yaml,spring,config
来源: https://blog.51cto.com/u_15265637/2891597

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有