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

news2024/9/28 9:27:29

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>

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: 逻辑上区分两个目标对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Volo - Rust gRPC 框架入门

一、参考资料 Volo-GitHub Volo-Overview 二、开发环境搭建 1、安装脚手架 # 安装 volo-cli cargo install volo-cli # 验证安装 volo help 2、编写 IDL # 文件 volo_demo.protosyntax "proto3"; package volo.demo;message Item {int64 id 1;string title …

React学习26(react-redux优化 工作使用)

项目结构 优化说明 1&#xff09;容器组件和UI组件混合成一个文件 2&#xff09;无需自己给容器传递store&#xff0c;在index.js入口文件给包裹一个Provider <Provider store {store}><App/> </Provider> 3&#xff09;使用了react-redux后也不用自己在…

Python入门教程:基本运算符

1.运算符 计算机可以进行的运算有很多种&#xff0c;可不只加减乘除这么简单&#xff0c;运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算&#xff0c;今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算、成员运算 2.算数运算 …

数据聚合、数据同步

文章目录数据聚合Bucket聚合语法聚合结果排序限定聚合范围Metric聚合语法RestAPI实现聚合数据同步发送MQ消息接收MQ消息数据聚合 Bucket聚合语法 GET /hotel/_search {"size": 0, // 设置size为0&#xff0c;结果中 不包含文档&#xff0c;只包含聚合结果~"…

Spark-内核(集群管理器、通讯架构、任务调度机制、Shuffle、内存管理)

文章目录Spark内核Spark部署模式的集群管理器YARN模式运行机制Standalone模式运行机制Spark通讯架构通信架构概述通讯架构解析Spark任务调度机制任务调度概述Stage级调度Spark Task级调度调度策略本地化调度失败重试与黑名单机制Spark Shuffle解析ShuffleMapStage与ResultStage…

SpringCloud微服务之Zuul网关

SpringCloud微服务之Zuul网关 家庭生活中经常有这样的感悟&#xff0c;家中的财政大权在老婆手里&#xff0c;想要花个小钱买个冰棍&#xff0c;得跟老婆请示&#xff0c;想要出个远门看看北京猿人&#xff0c;得跟老婆请示&#xff0c;想不要脸面去个夜店看看别的妞好在哪里&…

代码随想录第九天

专题&#xff1a;字符串 题目&#xff1a;字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。 比如&#xff0c;输入字符串"abcdefg"和数字2&#xff0c;该函数将返回左旋转两位得到的结果"cdefgab&…

ADI Blackfin DSP处理器-BF533的开发详解56:CVBS输入-DSP和ADV7180的MDMA用法(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 CVBS IN视频输出 代码实现功能 电视视频是奇场合偶场交替传输的&#xff0c;所以通过 CVBSIN 模块采集到的图像如上实验所看到的&#xff0c;是…

CentOS 7.6 安装与配置 MySql 5.7.40

1 通过wget下载MySql的rpm # wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm2 检查是否存在MySql的repo # cd /etc/yum.repos.d/ # ls CentOS-Base.repo CentOS-Epel.repo可以看到没有MySql的repo 3 安装MySql的repo&#xff0c;并查看是否安…

React 生命周期

React 生命周期 这篇文章&#xff0c;我们来聊一聊在React中的生命周期。首先我们明确一点&#xff0c;在React中&#xff0c;函数式组件是没有生命周期的。谈到生命周期&#xff0c;都是关于类组件的&#xff01; 生命周期官方网址 React.Component – React (docschina.or…

macOS Monterey 12.6.2 (21G320) Boot ISO 原版可引导镜像

macOS Monterey 12.6&#xff0c;皆为安全更新&#xff0c;不再赘述。 macOS Monterey 12.6&#xff0c;发布于 2022 年 9 月 12 日&#xff08;北京时间今日凌晨&#xff09;&#xff0c;本次为安全更新。 今日&#xff08;2022-07-21&#xff09;凌晨&#xff0c;Apple 终于…

CentOS 8:SSH远程登录

SSH远程登录 SSH远程登录&#xff0c;也是 C / S 模式 服务端&#xff1a;sshd &#xff0c;默认是启动的 systemctl status sshd systemctl start sshd SecureCRT 是打开了一个远程终端 注意&#xff1a;在终端环境里&#xff0c;不可以启动GUI程序 例如&#xff0c;在 …

【单片机】DS1302时钟/蜂鸣器

目录 一、DS1302时钟 1、DS1302时钟的介绍 2、DS1302时钟寄存器 3、DS1302时序图 4、BCD码 5、写一个时钟 6、写一个可调时钟 二、蜂鸣器 1、蜂鸣器的介绍​编辑 2、三极管放大驱动蜂鸣器 2.1NPN三极管工作原理&#xff08;基极电流和发射电流均流向集电区&#xff…

Python图像识别实战(二):实现批量图像读取和像素转换(附源码和实现效果)

前面我介绍了可视化的一些方法以及机器学习在预测方面的应用&#xff0c;分为分类问题&#xff08;预测值是离散型&#xff09;和回归问题&#xff08;预测值是连续型&#xff09;&#xff08;具体见之前的文章&#xff09;。 从本期开始&#xff0c;我将做一个关于图像识别的…

Dubbo 3 Dubbo 快速入门 3.2 Dubbo 快速入门 3.2.3 服务消费者

Dubbo 【黑马程序员Dubbo快速入门&#xff0c;Java分布式框架dubbo教程】 3 Dubbo 快速入门 文章目录Dubbo3 Dubbo 快速入门3.2 Dubbo 快速入门3.2.3 服务消费者3.2 Dubbo 快速入门 3.2.3 服务消费者 OK&#xff0c;之前我们 已经完成了 服务提供 者的改造 现在来改造 服务…

智能电网中采用博弈论的方法(Python代码实现)

目录 1 概述 2 系统模型 2.1 单价模型 2.2 效用模型和 能源消费者&#xff08;EC&#xff09; 的目标 2.3 成本模型和 中央电站&#xff08;CPS&#xff09; 的目标 2.4 优化问题 3 优化的能源管理模型 4 模型的特性 4.1 均衡的存在 4.2 决策过程 5 算法 6 数值的…

vector详解(不定长数组)

目录 什么是vector vector的介绍 模板的声明方式 vector的基本操作 push_back insert erase 遍历vector 小明爱数列-练习题 思路 什么是vector vector的介绍 和我一样,我猜你们看到题目时心里都会产生一个疑问"什么是vector?(大佬除外)".vector其实是…

一起Talk Android吧(第四百四十四回:UI控件之DatePicker)

文章目录概念介绍使用方法内容总结各位看官们大家好&#xff0c;上一回中咱们说的例子是"UI控件之NumberPicker",这一回中说的例子是"UI控件之DatePicker"。闲话休提&#xff0c;言归正转&#xff0c;让我们一起Talk Android吧&#xff01; 概念介绍 看官…

CSS实现文字扫光特效

上大学的玩 ae 的时候&#xff0c;就曾遇到过这个特效。偶然在百度看到了类似特效&#xff0c;没想到竟然能用 css 实现&#xff0c;所以就研究了一下&#xff0c;文字扫光效果如下&#xff1a; 实现思路&#xff1a; 光效移动效果&#xff0c;可以通过 background-image 设置…

RCNN网络源码解读(Ⅲ) --- finetune训练过程

目录 0.回顾 1.finetune二分类代码解释&#xff08;finetune.py&#xff09; 1.1 load_data&#xff08;定义获取数据的方法&#xff09; 1.2 CustomFineTuneDataset类 1.3 custom_batch_sampler类&#xff08; custom_batch_sampler.py&#xff09; 1.4 训练train_mod…