Nacos——配置管理基础应用

目录

一、快速入门

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');
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱布朗熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值