• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

SpringCloud学习笔记 - Nacos配置心搭建 - Nacos Config

武飞扬头像
笨鸟不是菜鸟
帮助1

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。

1. Nacos配置中心搭建的基本流程

前置条件:已经下载 Nacos 并启动 Nacos server。

学新通

1.1. 新建module:cloudalibaba-config-nacos-client3377

1. 引入nacos-config配置中心的核心依赖

    <dependencies>
    
        <!-- nacos注册中心核心依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        
        <!--web开发核心依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--服务监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
学新通

补充:新版需要补充引用:spring-cloud-starter-bootstrap依赖

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

2. 配置bootstrap.yaml文件。注:因为配置中心需要从外部加载文件信息,所以需要使用加载优先级更高的bootstrap文件

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 #nacos-server的服务器地址
        file-extension: yaml           #指定配置文件的后缀。目前只支持properties、yaml。

说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

3. 配置application.yaml文件,指定当前环境对应的 profile

spring:
  profiles:
    active: dev 

在nacos spring cloud中,dataId 的完整格式为:${prefix}-${spring.profiles.active}.${file-extension},即就是当我们在业务代码中获取配置信息时,nacos-config会自动通过上面的公式进行拼接,在nacos的配置文件中进行匹配,将我们需要的配置信息返回。

  • 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,这就要求在配置中心中存在这个文件才行。

4. 创建主启动类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class NacosConfigClientMain3377
{
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}

5. 创建业务类:通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope //启用Nacos的动态刷新功能。
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}
学新通

1.2. 在Nacos中发布配置文件信息

有两种方式可以在nacos中发布配置信息:通过调用 Nacos Open API 向 Nacos Server 发布配置,或者直接在nacos的控制台中新建配置文件。Open API 官方文档:https://nacos.io/zh-cn/docs/v2/guide/user/open-api.html

1. 在Nacos控制台中新建配置文件:nacos-config-client-dev.yaml
学新通

2. 设置DataId、Group(分组)、文件格式,并编写配置文件内容。全部填写完成,确认无误后点击最下方发布按钮即可。
学新通

3. 测试配置信息的获取:

  • 启动前需要在nacos客户端-配置管理-配置管理栏目下有对应的yaml配置文件
  • 运行cloud-config-nacos-client3377的主启动类
  • 调用接口查看配置信息 - http://localhost:3377/config/info
    学新通

4. 自带动态刷新
修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新。

2. Nacos中部分重要概念及简单使用

2.1. Nacos 概念

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

2. 配置管理:配置中心的主要功能
系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。

3. 配置项:配置文件中的一个键值对就是一个配置项
一个具体的可配置的参数及其值域,通常以 key=value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。

4. 配置集:配置项的集合,一般一个配置文件就是一个配置集
一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

5. 配置集 ID:也就是dataId,是配置集的唯一标识(多个namespace中可以重复)
Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

6. 命名空间:用来划分一个新的独立工作区域,各个命名空间之间互不影响
用于进行租户粒度的配置隔离。在不同的命名空间下,可以存在多个相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境下配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

7. 配置分组:用来在某个命名空间下划分一个独立的工作空间,这样在同一个命名空间下也可以存在 Data ID 相同的配置集。
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

2.2. namespace、group、dataId的配置和使用

2.2.1. group - 配置分组的使用

1. 创建配置文件时给文件设置一个分组即可,分组名为自定义,有意义即可
学新通

2. 在bootstrap.yaml中添加group配置

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        group: TEST_GROUP # 新增group配置项

3. 发送请求:http://localhost:3377/config/info,可以看到在同个namespace下,同时存在同名的配置集的情况下,只需要通过配置group就可以进行配置文件的切换
学新通

2.2.2. namespace -命名空间的使用

1. 在nacos中新建一个命名空间
学新通

2. 然后在新的命名空间下创建配置集即可,创建方法同上
学新通

学新通

3. 发送请求:http://localhost:3377/config/info,可以看到在不同namespace下,同时存在同名的配置集的情况下,只需要通过配置namespace和group就可以进行配置文件的切换
学新通

2.3. Namespace Group Data lD三者关系?为什么这么设计?

Namespace Group Data lD三者的包含关系:
学新通

默认情况:Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
学新通

  • Nacos默认的Namespace是public,Namespace主要用来实现隔离。
    • 比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
  • Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去
  • Service就是微服务:一个Service可以包含多个Cluster (集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。
    • 比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ) ,给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
  • 最后是Instance,就是微服务的实例。

Namespace相当于java中的项目名,Group 相当于java项目中的包名,Data lD相当于是类名。

  • namespace: 是可以用于区分部署环境的
  • Group和DatalD: 逻辑上区分两个目标对象

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbchhk
系列文章
更多 icon
同类精品
更多 icon
继续加载