使用Nacos作为配置中心

news2025/1/15 12:10:50

目录

一,配置中心简介

Nacos Config入门

二,nacos差异化配置 

三,nacos共享配置

同一个微服务的不同环境之间共享配置

不同微服务中间共享配置

四,nacos的命名空间&组

nacos的几个概念

创建命名空间(Namespace)


一,配置中心简介

配置中心的思路:

  • 首先把项目中各种配置全部都放到一个集中的地方进行统一管理,并提供一套标准的接口。

  • 当各个服务需要获取配置的时候,就来配置中心的接口拉取自己的配置。

  • 当配置中心中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动 态更新。

当加入了服务配置中心之后,我们的系统架构图会变成如下 

常见的配置中心如下:

  • Apollo Apollo是由携程开源的分布式配置中心。特点有很多,比如:配置更新之后可以实时生效,支持灰 度发布功能,并且能对所有的配置进行版本管理、操作审计等功能,提供开放平台API。并且资料 也写的很详细。

  • Disconf Disconf是由百度开源的分布式配置中心。它是基于Zookeeper来实现配置变更后实时通知和生效 的。

  • SpringCloud Config 这是Spring Cloud中带的配置中心组件。它和Spring是无缝集成,使用起来非常方便,并且它的配 置存储支持Git。不过它没有可视化的操作界面,配置的生效也不是实时的,需要重启或去刷新。

  • Nacos 这是SpingCloud alibaba技术栈中的一个组件,前面我们已经使用它做过服务注册中心。其实它也 集成了服务配置的功能,我们可以直接使用它作为服务配置中心。

Nacos Config入门

1 搭建nacos环境【使用现有的nacos环境即可】

2 在微服务公共模块中引入nacos的依赖

注:由于配置中心的依赖在多个微服务中都需要引入,所以此处建议将其加入到common公共模块中。

<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

3 在微服务service-product中添加nacos config的配置

提示:

1.不能使用原来的application.yml作为配置文件,而是新建一个bootstrap.yml作为配置文件;

2.在bootstrap和application数据项相同时,bootstrap中的配置不会被覆盖;

 配置文件优先级(由高到低)

spring:
  application:
    name: service-product
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 # nacos的服务端地址
        file-extension: yaml # 配置文件格式
  profiles:
    active: dev # 环境标识

提示:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 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.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变

  • file-exetension:为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。 

运行:今天主要讲解的模块为:配置管理

点击配置列表,点击右边+号,新建配置 ,如下图(Data ID命名要与yml配置文件中的name名相匹配,不能随意

注意:配置格式一定要选对,以及配置内容必须是英文输入,包括标点符号。可以通过颜色区分,当字体是红色或是无色说明可能存在错误,一定要仔细检查

配置内容

 

 

二,nacos差异化配置 

测试代码(以下有两种方式,更推荐第二种)

package com.dengxiyan.shopproduct.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/nacos-config")
@RefreshScope
public class NacosConfigController {
    @Autowired
    private ConfigurableApplicationContext applicationContext;
    //1 硬编码方式
    @GetMapping("/test1")
    public String nacosConfingTest1() {
        return applicationContext.getEnvironment().getProperty("config.appName");
    }

    @Value("${config.appName}")
    private String appName;
    //2 注解方式
    @GetMapping("/test2")
    public String nacosConfingTest2() {
        return appName;
    }

}

 

注释本地的application.yaml中的内容, 启动程序进行测试 如果依旧可以成功访问程序,说明我们nacos的配置中心功能已经实现

 

 

当在服务没有停掉的情况下修改配置内容,不需要重启项目同样也可以访问到获取到配置内容

 

 

三,nacos共享配置

同一个微服务的不同环境之间共享配置

如果想在同一个微服务的不同环境之间实现配置共享,其实很简单。 只需要提取一个以spring.application.name 命名的配置文件,然后将其所有环境的公共配置放在里 面即可。

 1 新建一个名为service-product.yml配置存放商品微服务的公共配置

接下来,修改bootstrap.yml中的配置,将active设置成test,再次访问,观察结果。不管如何切换微服务的环境都能成功获取nacos配置中心的shop-product.yml文件配置内容,从而实现不同环境下的共享配置。

spring:
  application:
    name: shop-product
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 # nacos的服务端地址
        file-extension: yml # 配置文件格式

        extension-configs[0]:
          data-id: all-service.yaml
          group: DEFAULT_GROUP
          refresh: true

        shared-configs[0]:
          data-id: all-service.yaml
          group: DEFAULT_GROUP
          refresh: true

       
  profiles:
    active: dev # 环境标识
# spring.application.name+spring.cloud.nacos.config.prefix
# shop-product-dev.yml 开发环境数据库配置信息
# shop-product-test.yml 测试环境数据库配置信息
# shop-product-prod.yml 生产环境数据库配置信息

2 添加测试方法

package com.dengxiyan.shopproduct.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/nacos-config")
@RefreshScope
public class NacosConfigController {
    

    //3 读取shop-product所有环境共享配置
    @Value("${config.os}")
    private String os;
    @RequestMapping("/test3")
    public String nacosConfingTest3() {
        return os;
    }
}

 

 配置生效

 

 

不同微服务中间共享配置

不同为服务之间实现配置共享的原理类似于文件引入,就是定义一个公共配置,然后在当前配置中引 入。

1 在nacos中定义一个DataID为all-service.yaml的配置,用于所有微服务共享

namespace:
          3fcc33ef-a998-49fc-b083-ecff7d1a63c7

完整代码 

spring:
  application:
    name: shop-product
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 # nacos的服务端地址
        file-extension: yml # 配置文件格式

        extension-configs[0]:
          data-id: all-service.yaml
          group: DEFAULT_GROUP
          refresh: true

        shared-configs[0]:
          data-id: all-service.yaml
          group: DEFAULT_GROUP
          refresh: true

        namespace:
          3fcc33ef-a998-49fc-b083-ecff7d1a63c7
      
  profiles:
    active: dev # 环境标识
# spring.application.name+spring.cloud.nacos.config.prefix
# shop-product-dev.yml 开发环境数据库配置信息
# shop-product-test.yml 测试环境数据库配置信息
# shop-product-prod.yml 生产环境数据库配置信息

 测试方法

package com.dengxiyan.shopproduct.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/nacos-config")
@RefreshScope
public class NacosConfigController {

    //4 读取不同微服务的共享配置
    @Value("${config.rebbitMq}")
    private String ip;
    @RequestMapping("/test4")
    public String nacosConfingTest4() {
        return ip;
    }
}

 

 

获取到的与配置内容一致

 

 

四,nacos的命名空间&组

nacos的几个概念

  • 命名空间(Namespace) 命名空间可用于进行不同环境的配置隔离。一般一个环境划分到一个命名空间

  • 配置分组(Group) 配置分组用于将不同的服务可以归类到同一分组。一般将一个项目的配置分到一组

  • 配置集(Data ID)

在系统中,一个配置文件通常就是一个配置集。一般微服务的配置就是一个配置集  

 

 

创建命名空间(Namespace)

如果没有出现空间ID(示填则自动生成),注意可能需要清空缓存

 

新建的组

 添加至配置文件的代码

  group:
          YL_GROUP

完整代码 

spring:
  application:
    name: shop-product
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 # nacos的服务端地址
        file-extension: yml # 配置文件格式

        extension-configs[0]:
          data-id: all-service.yaml
          group: DEFAULT_GROUP
          refresh: true

        shared-configs[0]:
          data-id: all-service.yaml
          group: DEFAULT_GROUP
          refresh: true

        namespace:
          3fcc33ef-a998-49fc-b083-ecff7d1a63c7
        group:
          YL_GROUP
  profiles:
    active: dev # 环境标识
# spring.application.name+spring.cloud.nacos.config.prefix
# shop-product-dev.yml 开发环境数据库配置信息
# shop-product-test.yml 测试环境数据库配置信息
# shop-product-prod.yml 生产环境数据库配置信息

配置生效 

 

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

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

相关文章

压测工具nGrinder:性能测试入门

1 前言 nGrinder将Grinder的控制台和代理包装起来&#xff0c;并扩展了支持多个并发测试的特性。用户可以设置使用多个进程或线程来并发的执行该脚本&#xff0c;通过不断重复地执行测试脚本&#xff0c;来模拟多并发用户访问。 2 相应参数配置 (1)输入需要测试的url地址&…

STM32实战总结:HAL之看门狗

在由单片机构成的微型计算机系统中&#xff0c;单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造成程序的跑飞&#xff0c;而陷入死循环&#xff1b;或者因为用户配置代码出现BUG&#xff0c;导致芯片无法正常工作。出于对单片机运行状态进行实时监测的考虑&#xff…

java面试强基(14)

Java 中 IO 流分为几种? 按照流的流向分&#xff0c;可以分为输入流和输出流&#xff1b;按照操作单元划分&#xff0c;可以划分为字节流和字符流&#xff1b;按照流的角色划分为节点流和处理流。 Java IO 流共涉及 40 多个类&#xff0c;这些类看上去很杂乱&#xff0c;但实…

[附源码]计算机毕业设计springboot病房管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

跨国并购数据库:SDC跨国数据库、Thomson数据库、A股上市公司并购数据库等多指标数据(4W+)

&#xff08;1&#xff09;SDC跨国数据库 1、数据来源&#xff1a;WRDS沃顿数据库Thomson Reuters SDC - Mergers and Acquisitions板块 2、时间跨度&#xff1a;1982年1月1日至2020年12月31日 3、区域范围&#xff1a;全国 4、指标说明&#xff1a; 数据的所有并购方都为…

DDD 与 EDA- 核心逻辑提炼方法论

在【DDD与应用架构】一文中我们说过&#xff0c;应用架构的存在就是为了把一团混沌的代码变得有秩序&#xff0c;好管理。我们保持最核心逻辑不变&#xff0c;就可以保持系统的稳定与发展。领域驱动设计的作者 Eric Evans 说&#xff1a;“为了使领域模型成为有价值的资产&…

华夏天信携手华为云开天aPaaS,打造安全、高效、节能的主煤流运输系统

摘要&#xff1a;基于开天aPaaS集成工作台&#xff0c;主煤流运输系统如何实现多源异构数据融合、皮带物料和人员违章的智能感知&#xff0c;以及皮带的智能控制。灵活架构、高效集成、快速开发&#xff01;本文分享自华为云社区《华夏天信携手华为云开天aPaaS&#xff0c;打造…

SSM三大框架之MyBatis总结【动力节点老杜】

文章目录JDBC的缺点MyBatis一、基础概念二、开发第一个mybatis程序1.resources目录&#xff1a;2.开发步骤3.从 XML 中构建 **SqlSessionFactory**4.mybatis中有两个主要的配置文件&#xff1a;5.关于第一个程序的小细节6.关于mybatis的事务管理机制。&#xff08;深度剖析&…

springboot+jsp高校学生宿舍管理系统-宿管带前端

本系统采用从上往下的步骤开发&#xff0c;基本功能如下&#xff1a; 本课题要求实现一套宿舍管理系统&#xff0c;系统主要包括个人中心、学生管理、宿管管理、报修信息管理、费用缴纳管理、留言板管理、论坛管理、系统管理等功能&#xff1b; 管理员用例图如下所示&#xff1…

抖音达人探店有用吗?算不算过时呢

其实我看到这个问题的时候也曾怀疑探店的方式真的对当下年轻人有作用吗&#xff1f;会不会有人怀疑探店达人和商家是串通好的&#xff1f;毕竟在有利益链的情况下&#xff0c;我们还能否相信仅仅靠一个视频就能知晓事物的孰好孰坏&#xff1f;今天就来为大家分析下抖音达人探店…

xss-labs/level7

我们如同一下构造那样 <script>alert(xss)</script> 产生以下回显 接着查看源代码 发现第一个输出点被转义了 没有利用价值了 第二个输出点则是可以发现script关键字直接给干没了 氧化钙!!! 似此 如何处之&#xff1f; 我们猜测后台服务器还是对一些特殊字符进…

软件测试全套教程,软件测试自学线路图

目录 一、背景&#xff1a; 二、行动&#xff1a; 三、软件测试实战具体路线&#xff1a; 第0阶段 &#xff1a;软件测试行业和个人匹配度分析 第1阶段&#xff1a;软件行业前景分析大纲解读 第2阶段&#xff1a;软件测试基础知识 第3阶段&#xff1a;需求分析阶段 第4…

[附源码]计算机毕业设计springboot大学生考勤管理系统论文

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

LVS-NAT模式实验案例

1 环境&#xff1a; 共四台主机 一台&#xff1a; internet client&#xff1a;192.168.10.8/24 GW:无 仅主机 一台&#xff1a;lvs eth1 仅主机 192.168.10.18/16 eth0 NAT 192.168.100.18/24 两台RS&#xff1a; RS1: 192.168.100.28/24 GW&#xff1a;192.168.100.18 NAT …

SpringCloud 网关 Gateway

哈喽~大家好&#xff0c;这篇来看看SpringCloud 网关 Gateway。 &#x1f947;个人主页&#xff1a;个人主页​​​​​ &#x1f948; 系列专栏&#xff1a;【】 &#x1f949;与这篇相关的文章&#xff1a; SpringCloud Sentinel 使用SpringCloud S…

手把手教你构建一个前端路由

涉及知识点&#xff1a;location对象、history对象 文章目录基础概念什么是路由如何实现前端路由涉及问题前端路由实现方式1. hash方式2. history方式3. debug&#xff1a;本地起服务报错扩展&#xff1a;封装路由类Routerhashhistory基础概念 什么是路由 路由是一组映射关系…

深度学习入门(9)神经网络Affine与Softmax层的计算图表示方式及其误差反向传播的代码实现

《深度学习入门》系列文章目录 深度学习入门 (1)感知机 深度学习入门&#xff08;2&#xff09;神经网络 深度学习入门&#xff08;3&#xff09;神经网络参数梯度的计算方式 深度学习入门&#xff08;4&#xff09;【深度学习实战】无框架实现两层神经网络的搭建与训练过程 深…

MySQL 进阶篇1.0 索引 SQL优化 视图 锁

01-课程介绍 02-存储引擎-MySQL体系结构 03存储引擎-简介 查询建表语句 --默认存储引擎:InnoDBshow create table account; 查询当前数据库支持的存储引擎show engines; 04存储引擎-InnoDB介绍 开关为"ON": 表示每个innodb引擎的表都有一个idb表共享文件 …

Focal Self-attention for Local-Global Interactions in Vision Transformers

目录 Abstract 1. Introduction 2. MEthod 2.1 Model architecture 2.2 Focal self-attention 2.2.1 Window-wise attention 2.2.2 Complexity analysis 2.3 Model configuration 3. Related work 4. Experiments 4.1 Image classification on ImageNet-1K 4.…

26. [Python GUI] PyQt5中拖放详解之拖放动作

PyQt5的拖放动作 1. 什么是拖放动作 拖放动作是指用户希望怎样处理拖放的数据&#xff0c;比如移动、复制、还是创建由目标到源的链 接等。 拖放动作由 Qt::DropAction 枚举描述&#xff1a; 2. 可能的拖放动作&#xff0c;实际的拖放动作&#xff0c;建议的拖放动作 可能的…