nacos配置中心的使用(精通)

Nacos是综合型解决方案
服务治理
服务的发现
配置管理

一、Nacos的启动方式

nacos:注册中心
解压到,非中文名的文件夹下,进入bin目录中,在路径处,输入cmd打开密令窗口
正常启动命令:startup.cmd -m standalone
集群启动命令:startup.cmd -m cluster
验证是否成功启用: http://localhost:8848/nacos

二、配置管理

  1. 提交和获取配置信息

提交配置信息:post请求http://localhost:8848/nacos/v1/cs/configs地址发送请求提交配置信息dataId、group、content三个参数,content为配置内容

获取配置信息:get请求http://localhost:8848/nacos/v1/cs/configs地址发送请求获取配置信息dataId、group两个参数

  1. nacos数据库支持

  1. 默认数据库

默认使用的嵌入式数据库,增删改查不方便
  1. Mysql数据库

⑴ 创建数据库添加表结构
可以使用mysql数据库进行存储nacos数据,在数据库中创建nacos_config库,执行nacos/conf/nacos-mysql.sql文件,创建表结构和数据
⑵ 修改nacos配置文件

修改nacos1.4.2\conf\application.properties文件,将数据库信息修改完整

IP地址、库名、账号、密码等,配置信息如下:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

修改完成后,运行nacos

⑶ 添加配置信息

点击+按钮

添加配置信息,配置格式固定,并点击提交按钮

⑷ 查看数据是否已经存在数据库中

三、在Maven项目中获取配置信息

  1. 添加依赖

    <dependency>
         <groupId>***.alibaba.nacos</groupId>
         <artifactId>nacos-client</artifactId>
         <version>1.3.2</version>
    </dependency>
  1. 编写获取配置信息的类

public class SimpleDemoMain {
    public static void main(String[] args) throws NacosException {
        // nacos的访问地址
        String serverAddr = "192.168.16.125:8848";
        // data id
        String dataId = "nacos-simple-demo.yaml";
        // group
        String group = "DEFAULT_GROUP";
        // 创建properties属性,作用是将dataId和group两个属性放进去,先创建出来
        Properties properties = new Properties();
        // 指定nacos地址添加到properties属性中
        properties.put("serverAddr", serverAddr);
        // 获取配置
        ConfigService configService = NacosFactory.createConfigService(properties);
        // 传递的三个属性:dataId、group、超时时间
        String config = configService.getConfig(dataId, group, 5000);
        System.out.println("配置信息:" + config);
    }
}

四、配置模型

对于nacos的配置管理,通过Namespace命名空间、group分组、Data ID文件名称,能够定位到一个配置集

  1. 配置集(data ID)

一个配置文件就是一个配置集,一个配置集可以包含系统的各种配置信息,例如:一个配置集可以包含了数据源、线程池、日志级别等配置项,每个配置集可以定义一个有意义的名称,就是配置集的ID即Data ID
  1. 配置项

配置集中包含的一个个的配置内容就是配置项,它代表一个具体的可配置的参数与其值域,通常以key=value的形式存在,例如:配置系统的日志输出级别 logLevel=INFO|WARN|EROR 就是一个配置项
  1. 配置分组(Group)

配置分组是对配置集进行分组,通过一个有意义的字符串来表示,不同的配置分组下可以有相同的配置集(Data ID),当在Nacos上创建一个配置时,如果未填写配置分组名称,则配置分组的名称默认采用DEFAULT_GROUP,配置分组的常用场景:可用于区分不同的项目或应用,例如:学生管理系统的配置集可以定义group为:STUDENT_GROUP
  1. 命名空间(Namespace)

命名空间可用于进行不同环境的配置隔离,例如可以隔离开发环境、测试环境和生产环境,因为他们的配置各不相同,或者时隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通过namespace隔离,不同的命名空间下,可以存在相同名称的配置分组(Group)或配置集

最佳实践

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

五、命名空间(namespace)

  1. 创建命名空间

作用:将配置信息进行隔离

  1. 通过项目读取配置信息

Nacos中的数据

向properties属性中添加命名空间ID,就会从指定的命名空间中读取配置信息,

properties属性中不添加命名空间ID,默认会读取保留空间(public)的配置信息

六、导航菜单栏(配置管理)

  1. 配置列表

  1. 命名空间的切换

  1. 增、删、批量删、遍历、详情、查询等

  1. 导出、导入:可以将配置文件导出到本地,可以将配置文件从本地导入到nacos页面

  1. 克隆:可以将一个命名空间的配置文件克隆到另一个命名空间

  1. 历史版本

  1. 命名空间的切换

  1. 通过Data ID和Group查询历史修改记录

  1. 查看历史修改记录的详情

  1. 可以通过历史记录进行回滚

  1. 监听查询

当后台有程序进行监听nacos配置修改情况时,可以查询到监听的地址

也可以通过服务器IP地址查询监控的配置Data ID和Group

后端监听代码

运行结果

七、登录管理

  1. 添加依赖

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>5.5.4</version>
</dependency>
  1. 获取加密的密码

代码如下:

public static void main(String[] args) {
    // 获取加密密码
    String encode = new BCryptPasswordEncoder().encode("123");
    System.out.println("加密后的密码:"+encode);
}

运行结果:123:$2a$10$k91omOHSw36IqsjxpiTlw.M93m.ZZWXlZ***ppfS52c2sZmYAJRmQy

  1. 添加数据库用户信息

Sql:向用户表和角色表添加信息,将生成的密码添加进去

INSERT INTO USERS(username,PASSWORD,enabled) VALUES('小马','$2a$10$o/OZjz/JOO/Vi0H4iu9LeeOdtunj4ru35IJQrxAUdbrQCbA9gUCWW',true);
INSERT INTO roles (username,role) VALUES('小马','ROLE_ADMIN');

测试登录

  1. 设置免登录

修改nacos1.4.2\conf\application.properties配置文件,配置信息如下

spring.security.enabled=false
management.security=false
security.besic.enabled=false
nacos.securtiy.ignore.urls=/**

修改后重新启动nacos,关闭浏览器重新访问:localhost:8848/nacos

八、在Maven项目中动态读取配置

子项目继承父项目

  1. 父子项目中添加依赖

⑴ 父项目中添加依赖,设置好版本,小心版本冲突问题

<!--表示为父工程,方便进行管理-->
<packaging>pom</packaging>

<properties>
    <project.build.sourceEncoding>UTF_8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF_8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>***.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

⑵ 子项目中添加依赖

<artifactId>service1</artifactId>

<dependencies>
    <dependency>
        <groupId>***.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
  1. 添加读取nacos的yml配置文件

注意:该配置要放在bootstrap.xml配置文件中,千万不要放在application.xml配置文件中,bootstrap.xml优先级大于application.xml的优先级,文件拓展名dataId和测试组名称要与nacos中对应,namespace是nacos中的命名空间id,一定要与nacos的各属性名称一致
spring:
  application:
    name: service1
  cloud:
    nacos:
      config:
        # 配置中心地址
        server-addr: 192.168.16.125:8848
        # 配置文件扩展名 data ID的名称就是application的name加file-extension service1.yaml
                # 如果这里是properties文件,就设置为:properties,相对应配置文件扩展名 data ID就为service1.properties
                        file-extension: yaml
                        # 开发环境,这里的值是nacos中的命名空间id,从nacos中获取
                        namespace: 5149b373-af61-4bdd-a19c-589d2c71179e
                        # 测试组,从nacos中获取
                        group: TEST_GROUP
  1. 设置启动类,测试读取配置信息

⑴ 设置启动类=>测试静态读取配置信息=>测试动态读取信息

这里直接在启动类进行的测试,可以自定义controller类进行测试

⑵ Nacos中配置信息:

⑶ 运行项目查看配置结果是否一致:

  1. 自定义拓展dataId(实现读取多个nacos配置文件)

⑴ 添加配置进行测试(方法一建议使用)

在bootstrap.xml配置文件中添加配置

# 读取多个配置文件,下标从0开始
ext-config[0]:
  # 设置dataId 如果不设置group默认为DEFAULT_GROUP
  data-id: ext-config-***mon01.properties
# 未设置动态刷新配置,所以在nacos中修改会不会刷新
ext-config[1]:
  data-id: ext-config-***mon02.properties
  group: GLOBALE_GROUP
# 设置了动态配置所以可以动态刷新
ext-config[2]:
  data-id: ext-config-***mon03.properties
  group: REFRESH_GROUP
  # 动态刷熊
  refresh: true

进行测试:

测试结果:

Nacos中的配置:

⑵ 添加配置进行测试(方法二不建议使用)

注意:这个配置方式只能识别分组名称为DEFAULT_GROUP(默认)的文件,在bootstrap.xml配置文件中添加配置
# 读取多个nacos配置文件,只识别组名为DEFAULT_GROUP(默认)的文件
shared-dataids: ext-config-***mon01.properties,ext-config-***mon02.properties,ext-config-***mon03.properties
# 设置文件可以动态刷新配置文件
refreshable-dataids: ext-config-***mon01.properties

进行测试:

测试结果:

Nacos中的配置:

  1. 配置的优先级(看图)

九、nacos集群

至少三个nacos

  1. 修改nacos\conf\application.properties文件

将每个nacos文件的端口号设置成不同的例如:8848、8849、8850

设置ip地址:127.0.0.1

修改完成后,项目的配置文件也要修改ip地址和端口号,多个用逗号分割

  1. 修改nacos\conf\cluster.conf.example文件

文件名修改为cluster.conf

修改里面内容,格式为:ip地址:端口号,分别指定所有nacos,例如:

192.168.16.101:8847

192.168.16.102:8848

192.168.16.103:8849

  1. 启动所有nacos

集群启动命令:startup.cmd -m cluster

当nacos启动后,有一个nacos宕机后,nacos还可以正常使用

转载请说明出处内容投诉
CSS教程_站长资源网 » nacos配置中心的使用(精通)

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买