Nacos——配置管理基础应用

news2024/11/14 4:20:31

目录

一、快速入门

1.1  发布配置 

1.2 nacos client远程获取配置

   1.2.1  导入坐标

   1.2.2  程序代码

二、Nacos配置管理基础应用

2.1 Nacos配置管理模型

 2.1.2 配置集(Data Id) 

 2.1.3 配置项

 2.1.4 配置分组 (Group)

 2.1.5 命名空间(Namespace)

 2.1.6  最佳实践(总结)

2.2  命名空间管理

 2.2.1  namespace隔离设计

 2.2.2 命名空间管理

2.3  测试命名空间

2.3.1  发布新配置集

2.3.2  获取新配置项

2.4  监听查询功能操作

2.4.1 监听查询功能介绍

2.4.2  代码功能展示

2.5   登录管理

2.5.1  修改默认用户名/密码

2.5.2  BCrypt的maven坐标

2.5.3  代码实现修改密码

2.5.4 新增用户名和密码


一、快速入门

1.1  发布配置 

     浏览器访问http://127.0.0.1:8848/nacos,打开nacos控制台,并点击菜单配置管理->配置列表

Nacos 添加如下的配置:
     Data ID:       nacos‐simple‐demo.yaml
     Group  :       DEFAULT_GROUP
     配置格式 :     YAML
     配置内容:    common:
                                config1:   something
注意dataid是以properties(默认的文件扩展名方式)为扩展名,这里使用yaml

 

但是我在发布的时候,出现了“发布失败,请检查参数是否正确”错误

      可能原因:

            1、MySQL版本与nacos版本不对应,1.4.0以下使用的mysql驱动是8.0以下的,1.4.0以上使用的驱动就是8.0以上的,使nacos和数据库的版本对应。

              

            2、检查自己的mysql数据库是否有错误,我用的是这个sql文件导入的,如果是这个文件导入的话,记得看第三条

    

            3、可以阅读下面这篇文章Docker部署nacos 添加配置文件提示: 发布失败。请检查参数是否正确。_侣行gxn的博客-CSDN博客_发布失败。请检查参数是否正确。

           4、建议使用nacos稳定版本,下面是nacos官方文档,可以在里面下载

                 Nacos 快速开始    

1.2 nacos client远程获取配置

   1.2.1  导入坐标

       首先自己创建一个maven工程使用,导入下面依赖(因为我的版本是2.1.1,所以我导入的是2.1.1)

<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>2.1.1</version>
</dependency>

  1.2.2  程序代码

   

获取某配置集的代码
    获取配置集需要指定:
       1 nacos服务地址,必须指定         比如:     127.0.0.1:8848
       2 namespace ,如不指定默认 public 
       3 group ,如不指定默认 DEFAULT_GROUP
       4 dataId,必须指定                       比如:    nacos-simple-demo.yaml
public class SimpleDemoMain {
    public static void main(String[] args) {
//      使用nacos client远程获取nacos服务上的配置信息

//      nacos server地址
        String serverAddr = "127.0.0.1:8848";
//      data id
        String dataId = "nacos-simple-demo.yaml";
//      group
        String group = "DEFAULT_GROUP";

//      Properties指定服务的地址,key Value的形式,记住,key的形式不能写错
        Properties properties = new Properties();
//      此时ConfigService对象就知道能从哪里获取配置
        properties.put("serverAddr",serverAddr);

//      获取配置
//          createConfigService()创建配置服务的对象,我们选择传入一个Properties对象
        ConfigService configService = null;
        try {
            configService = NacosFactory.createConfigService(properties);
//          这一步其实就是获取配置 参数:String dataId,String group,long timeoutMs超时时间
//          获取配置的时候我们指定dataId与group之后,ConfigService就能获取到信息的配置内容
            String contont = configService.getConfig(dataId, group,5000);
            System.out.println(contont);
        } catch (NacosException e) {
            throw new RuntimeException(e);
        }

    }
}

如果运行了上面程序出现了上图所示错误,可以再加一个self4j的maven坐标 

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>2.0.3</version>
    </dependency>

成功运行之后就是下面的结果:

 



二、Nacos配置管理基础应用

2.1 Nacos配置管理模型

  对于Nacos配置管理,通过Namespace、group、DataId能够定位到一个配置集。

  下面的service指的是服务发现,我们以后再学


 2.1.2 配置集(Data Id) 

      在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如一个配置集可能包含了数据源、线程池、日志级别等配置项。

     每个配置集都可以定义一个有意义的名称,就是配置集的ID即Data Id

     就比如说我们之前发布的配置中的Data Id是nacos-simple-demo.yaml,即nacos-simple-demo.yaml是配置集

      每个配置文件对应一个DataId    

2.1.3 配置项

       配置集 中包含的一个个配置内容就是 配置项 。它代表一个具体的可配置的参数与其值域,通常以key=value的形式存在。
      例如我们常配置系统的日志输出级别logLevel=INFO|WARN|ERROR )就是一个配置项。
      其他的还有数据库的连接参数
      配置项中一般是key: value格式,只是表现形式不一样
     
      配置格式我们一般选择YAML格式  
      我们之前所写的下面这段代码就是配置项
common:

   config: something

2.1.4 配置分组 (Group)

   配置分组是对配置集进行分组(可以把几个配置文件归类成一组),通过一个有意义的字符串(如BuyTrade)来表示,不同的配置分组下可以有相同的配置集(DataID

   当您在Nacos上创建一个配置  时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_GROUP。

   配置分组的常见场景:可用于区分不同的项目或应用(一般一个项目或应用一个组),例如:学生管理系统的配置集可以定义一个group为:STUDENT_GROUP

 

2.1.5 命名空间(Namespace)

       命名空间(namespace)可用于进行不同环境的配置隔离(我们完全可以定义两套命名空间,而且这两套命名空间是相互隔离的)

        例如可以隔离开发环境、测试环境和生产环境,因为它们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通过namespace隔离。

         不同的命名空间下,可以存在相同名称的配置分组(Group)或配置集。

         
          配置空间作为整个配置集、配置项、配置分组的隔离

2.1.6  最佳实践(总结)

        Nacos 抽象定义了 Namespace Group DataID 的概念,具体这几个概念代表什么,取决于我们把它们看成什么,这里推荐给大家一种用法,如下图:

Namespace :代表不同 环境 ,如开发、测试、生产环境(每一个环境我们都可以创建一个Namespace)。
Group :代表某 项目 ,如 XX 医疗项目、 XX 电商项目
DataId :每个项目下往往有若干个 工程 ,每个配置集 (DataId) 是一个工程的 主配置文件

 

 

2.2  命名空间管理

2.2.1  namespace隔离设计

      namespace 的设计是 nacos 基于此做多环境以及多租户(多个用户共同使用 nacos )数据 ( 配置和服务 ) 隔离的。

  •      从一个租户 ( 用户 ) 的角度来看,如果有多套不同的环境,那么这个时候可以根据指定的环境来创建不同的 namespce,以此来实现多环境的隔离。例如,你可能有开发,测试和生产三个不同的环境,那么使用一套nacos集群可以分别建以下三个不同的 namespace
      如下图所示,分别为开发、测试、生产环境,不同的环境,其内容事互不影响的

 

  •      从多个租户 (用户)的角度来看,每个租户(用户)可能会有自己的namespace(每个用户的配置信息互不影响), 每个租户 ( 用户 ) 的配置数据以及注册的服务数据都会归属到自己的namespace 下,以此来实现多租户间的数据隔离。例如超级管理员分配了三个租户,分别为张三、李四和王五。分配好了之后,各租户用自己的账户名和密码登录后,创建自己的命名空间。如下图所示:

2.2.2 命名空间管理

        命名空间 (Namespace) 是用于隔离多个环境的(如开发、测试、生产),而每个应用在不同环境的同一个配置(如数据库数据源)的值是不一样的。因此,我们应针对企业项目实际研发流程、环境进行规划。
        如某软件公司拥有开发、测试、生产三套环境,那么我们应该针对这三个环境分别建立三个 namespace

  下面这个public就是命名空间

 

怎么创建命名空间?

 

如下图所示,我们成功的创建了命名空间"prod" ,然后每个命名空间都会有一个id

 我们写代码的时候,要指定命名空间就要指定命名空间id,命名空间id可以在下图中复制

String namespace ="2f820239-915b-417c-9002-ead05543ea3d";

 

 然后我们再回到配置列表我们会发现多了一个命名空间"prod"

 

此时prod命名空间并没有配置(我们也可以在下面这个位置获取到命名空间ID)

 

       namespace public nacos 的一个保留空间,如果您需要创建自己 namespace ,不要和 public重名,以一个实际业务场景有具体语义的名字来命名,以免带来字面上不容易区分自己是哪一个 namespace。
        在编写程序获取配置集时,指定的 namespace 参数一定要填写 命名空间 ID ,而不是名称
       如果我们编写代码的时候并没有指定namespace,那默认就是public

2.3  测试命名空间

2.3.1  发布新配置集

    刚刚我们创建了"prod"命名空间,现在我们在"prod"命名空间中再创建一个配置集(DataId)
   
    为了表现出与之前的不同,我修改了一下配置内容

 

 

 

发布成功后是下面这个样子

 

2.3.2  获取新配置项

下面我们获取一下"prod"命名空间的nacos-simple-demo.yaml配置集的配置项
public class SimpleDemoMain {
    public static void main(String[] args) {
//      使用nacos client远程获取nacos服务上的配置信息

//      nacos server地址
        String serverAddr = "127.0.0.1:8848";
//      命名空间 默认public
        String namespace = "2f820239-915b-417c-9002-ead05543ea3d";
//      data id
        String dataId = "nacos-simple-demo.yaml";
//      group
        String group = "DEFAULT_GROUP";

//      Properties指定服务的地址,key Value的形式,记住,key的形式不能写错
        Properties properties = new Properties();
//      此时ConfigService对象就知道能从哪里获取配置
        properties.put("serverAddr",serverAddr);
        properties.put("namespace",namespace);
//      获取配置
//          createConfigService()创建配置服务的对象,我们选择传入一个Properties对象
        ConfigService configService = null;
        try {
            configService = NacosFactory.createConfigService(properties);
//          这一步其实就是获取配置 参数:String dataId,String group,long timeoutMs超时时间
//          获取配置的时候我们指定dataId与group之后,ConfigService就能获取到信息的配置内容
            String contont = configService.getConfig(dataId, group,5000);
            System.out.println(contont);
        } catch (NacosException e) {
            throw new RuntimeException(e);
        }
    }
}

2.4  监听查询功能操作

2.4.1 监听查询功能介绍

   客户端去查询服务端的配置信息,当信息有变化的时候,服务端会通知客户端的

    但是如果我们的客户端(代码)一直在运行不停止,相当于我们在监听着服务端的内容变化,那么当服务端的配置文件发生改变,那服务端就可以主动通知客户端来获取配置文件的内容

 

 

2.4.2  代码功能展示

public class SimpleDemoMain {
    public static void main(String[] args) {
//      使用nacos client远程获取nacos服务上的配置信息

//      nacos server地址
        String serverAddr = "127.0.0.1:8848";
//      命名空间 默认public
        String namespace = "2f820239-915b-417c-9002-ead05543ea3d";
//      data id
        String dataId = "nacos-simple-demo.yaml";
//      group
        String group = "DEFAULT_GROUP";

//      Properties指定服务的地址,key Value的形式,记住,key的形式不能写错
        Properties properties = new Properties();
//      此时ConfigService对象就知道能从哪里获取配置
        properties.put("serverAddr",serverAddr);
        properties.put("namespace",namespace);
//      获取配置
//          createConfigService()创建配置服务的对象,我们选择传入一个Properties对象
        ConfigService configService = null;
        try {
            configService = NacosFactory.createConfigService(properties);
//          这一步其实就是获取配置 参数:String dataId,String group,long timeoutMs超时时间
//          获取配置的时候我们指定dataId与group之后,ConfigService就能获取到信息的配置内容
            String contont = configService.getConfig(dataId, group,5000);
            System.out.println(contont);

//          添加监听器    参数:String dataId,String group,Listener listener
            configService.addListener(dataId, group, new Listener() {
                public Executor getExecutor() {
                    return null;
                }
//              当配置有变化的时候获取通知
                public void receiveConfigInfo(String s) {
//                  配置变化的具体内容
                    System.out.println(s);
                }
            });
        } catch (NacosException e) {
            throw new RuntimeException(e);
        }
//      让这个程序不结束
        while(true){
            try{
                Thread.sleep(2000);

            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

我们首先启动的时候,控制台的效果是下面这个样子的 

我们打开可视化界面,在“监听查询模块”我们发现了下面的信息

 

改变下面的内容

 

 当我们将内容发布出去后,idea控制台就会出现了下面的变化

 

 

2.5   登录管理

Nacos版本支持简单的登录功能

     默认用户名nacos,默认密码nacos

2.5.1  修改默认用户名/密码

      Nacos使用的是BCryptPasswordEncoder加密的方式,把明文的格式转化成BCrypt加密形式

      如下图所示,下面就是默认的用户名和密码,password便是BCrypt加密形式

 

2.5.2  BCrypt的maven坐标

 <dependency>
    <groupId>org.springframework.security</groupId>  
    <artifactId>spring‐security‐core</artifactId>
    <version>5.1.4.RELEASE</version>
</dependency>

2.5.3  代码实现修改密码

       编写PasswordEncoderUtil类,生成加密后的密码,采用BCrypt加密方法在每次生成密码时会加随机盐,所以生成密码每次可能不一样。

  

      盐(Salt),在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。

     随机盐(salt)增加密码存储安全

public class PasswordEncoderUtil {
 
    public static void main(String[] args) {
        System.out.println(new BCryptPasswordEncoder().encode("123"));    }
}
 

当我们获取到加密之后的密码,我们可以使用Java代码修改密码,也可以在navicat中直接修改密码

2.5.4 新增用户名和密码

INSERT INTO users (username, password, enabled) VALUES ('nacos1','$2a$10$SmtL5C6Gp2sLjBrhrx1vj.dJAbJLa4FiJYZsBb921/wfvKAmxKWyu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos1', 'ROLE_ADMIN');
 

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

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

相关文章

Worok:专门针对亚洲实体的网络间谍组织

ESET 的研究人员发现了一个全新的攻击组织 Worok&#xff0c;该组织自动 2020 年就一直处于活跃状态。Worok 使用的工具集包括一个 C 编写的加载程序 CLRLoad、一个 PowerShell 编写的后门 PowHeartBeat 和一个 C# 编写的加载程序 PNGLoad&#xff0c;攻击者使用隐写术来提取隐…

PPT与Inkscape自定义色板

PPT与Inkscape自定义色板简述 本文主要分享了PPT与Inkscape中自定义色板功能&#xff0c;以满足个性化配色需求。此外&#xff0c;文末分享了常见的配色网站和图片网站&#xff0c;前者可以满足配色需求&#xff0c;后者可以满足配图需求。 PPT自定义色板 在常见的办公三件套中…

pycharm远程连接服务器,并单步调试服务器上的代码

每天都有不同的朋友来Push我 那如果比较健忘的话&#xff0c;为啥不问一下chatGPT呢 问题的缘由在我想在本地单步调试代码。。。 我的代码完全在云端服务器的&#xff0c;还有数据集都是&#xff0c;但实际上本地代码可以通过pycharm给他传上去。 但是在后面配置的时候需要两…

高密度部署,基于动态库的尝试,rust动态调库

目录前言faas特点方案思考实践制作动态库调用动态库尾语前言 最近在搞faas平台&#xff0c;也试了各大云厂商的产品&#xff0c;效果都不是很理想。和我心目中的faas想去甚远。  和小伙伴们吹完牛逼&#xff0c;心有所感&#xff0c;写下这篇文章&#xff0c;时间跨度较长&…

「AI人工智能」Node.js如何接入OpenAI开发

文章目录前言一、创建OpenAI账号二、安装axios 库三、导入 axios 库四、调用 OpenAI API五、测试 OpenAI API前言 本文主要介绍如何将 Node.js 应用程序与 OpenAI 集成&#xff0c;可以使用 OpenAI API。 一、创建OpenAI账号 创建一个 OpenAI 帐户并注册 API 密钥。你可以在 …

Linux系统一键检测和加固脚本

主要是为了Linux系统的安全&#xff0c;通过脚本对Linux系统进行一键检测和一键加固。 Check_Script #包含2个文件 CentOS_Check_Script.sh README.txt 操作说明 #执行CentOS-Check_Script.sh脚本文件进行检查,命令格式如下 sudo sh CentOS_Check_Script.sh | tee check_da…

Spring Boot 2.x系列【28】应用篇之JAVA执行服务器操作命令

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot版本2.7.0 文章目录前言本地服务器远程服务器前言 在某些实际开发场景中&#xff0c;我们需要调用JAVA程序去执行一些服务器操作命令&#xff0c;比如&#xff1a; 获取服务器的CPU…

牛逼的不停服定位线上问题-arthas

​ Hello&#xff0c;大家好我是你们可爱的小花。 前言 你是不是为了生产环境问题&#xff0c;无法定位、无法中断、无法解决 项目无故异常&#xff0c;日志无报错、报错不够明确 测试环境无法复现、生产环境问题偶发 但重启项目后问题消失&#xff0c;无法给领导一个答复而苦…

ChatGPT冷观察:没有大模型的土壤,开不出ChatBot的花

文|智能相对论作者|叶远风谁在跟风&#xff0c;谁又有真本事能做出中国版的对标产品来&#xff1f;这恐怕是ChatGPT这股热潮以来&#xff0c;关心中国AI发展的业界人士最想问的问题。或者说&#xff0c;在中国人工智能不落后于全世界的当下&#xff0c;业界也在普遍渴望一个真正…

AWS Directory Service

Hello大家好&#xff0c;我们接下来讨论AWS Directory Service&#xff0c;AWS目录服务的内容。 什么是微软活动目录&#xff08;AD&#xff09; 在认证考试中有很多的考点是关于微软AD部分的&#xff0c;也就是微软活动目录以及AWS活动目录服务—AWS Directory Service的内容…

PowerShell Install Mysql 8

MySQL介绍 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 mysql download Mysql Serverdownload创建一键安装Mysql 8自动化脚本 Expand-Archive #解压文件Start-P…

【我有一个梦想:帮你实现你的梦想】

很多人都曾有过这样的经历&#xff0c;某天突然对某个东西产生了兴趣&#xff0c;于是兴致勃勃的开始在网上各种搜&#xff0c;各种查&#xff0c;去各大论坛到处看到处问&#xff0c;在网上搜集很多免费的电子书&#xff0c;看了很多视频&#xff0c;最后忙活了一阵子&#xf…

若依框架如何新增自定义主题风格

若依框架新增主题风格1.实现结果2.实现步骤2.1Settings目录下2.2 variables.scss2.3 sidebar.scss2.4 Logo.vue2.5 Siderbar目录下的index.vue1.实现结果 2.实现步骤 需要改动的文件目录&#xff1a; 2.1Settings目录下 <div class"setting-drawer-block-checbox-it…

DBeaver:开源、跨平台、强大的数据库管理工具

文章目录一、简介1.DBeaver 是什么2.DBeaver 的功能3.DBeaver 的优点二、安装与配置1.系统要求2.下载与安装3.连接数据库三、总结一、简介 1.DBeaver 是什么 DBeaver 是一个流行的开源数据库客户端&#xff0c;它可以用于连接和管理多种不同类型的数据库系统&#xff0c;包括…

什么是STAR原则?

文章目录&#x1f4cb;前言&#x1f525;省流版&#x1f3af;什么是STAR原则&#x1f3af;进行过程&#x1f4cb;前言 对于大部分还在学习阶段的学生们来说&#xff0c;可能并不了解这个原则的含义&#xff0c;这里的star并不是指英文单词星星。这个原则我也是前段时间才认识到…

CS224W课程学习笔记(二):网络图的特征说明和指标实战

引言 在第二三节课中&#xff0c;主要研究的是四个关键网络属性以表征图形&#xff1a;度分布&#xff0c;路径长度&#xff0c;聚类系数和连接组件 。 这些定义主要是针对无向图的&#xff0c;而由于上一节中已经介绍了度分布&#xff0c;以及相应公式和例题&#xff0c;关于…

刚性电路板的特点及与柔性电路板的区别

打开市场上的任何一个电子产品&#xff0c;会发现里面都有一块或多块电路板。电路板是电子产品运行的核心&#xff0c;之前沐渥小编已经给大家介绍了柔性电路板&#xff0c;下面给大家介绍刚性电路板的基础知识。 刚性电路板俗称硬板&#xff0c;是由不容易变形的刚性基材制成的…

MASA Stack 1.0 发布会 —— 社区问题解答

MASA Stack 1.0 圆桌讨论 Q1&#xff1a; 全职开源的团队&#xff0c;你们的收入是什么&#xff1f; 1.首先感谢我们的金主朗诗德公司&#xff0c;朗诗德是一家大型的净水器研发、生产、销售的公司&#xff0c;我们的产品也在朗诗德公司进行了大量的落地验证&#xff0c;再次…

Kotlin新手教程二(Kotlin基本数据类型及基础语法)

一、基本数据类型 1.数字 由于Kotlin支持类型推断&#xff0c;所以在使用时若超出Int的范围则会被认定为其它类型&#xff1b;若需要显式指定Long型值&#xff0c;则需要在值后添加L后缀。 2.浮点数 3.比较两个数&#xff08; 和 &#xff09; Kotlin 中没有基础数据类型&a…

C语言(输出scanf()函数)

一.概念带入 scanf()把输入的字符串转换成整数&#xff0c;浮点数&#xff0c;字符或字符串。而printf()正好与其相反&#xff0c;把整数&#xff0c;浮点数&#xff0c;字符和字符串转换成显示在屏幕上的文本。所以scanf&#xff08;&#xff09;在使用上面会和printf有很多一…