笔记翻译出处:黑马Nacoshttps://www.bilibili.com/video/BV1VJ411X7xX?p=17&spm_id_from=333.880.my_history.page.click&vd_source=3c0d9a4d48df5bf76352d1653111b1d7

一、配置中心

1、简述

        配置中心一般用于微服务中,当单一系统被拆分成分布式系统上的一个个服务节点之后,系统的配置文件也需要被拆分。配置中心就是将配置文件从系统中分离出来,对系统配置进行统一的管理,并且系统配置远程被修改后,应用还可以主动获取修改后的配置内容,应用自身不需要自己去管理系统配置。
        简单来说,就是把Springboot的yml等配置文件放在远程管理,由Springboot主动获取。

2、特性

1)配置特点

配置特点描述
1配置是独立于程序的只读变量读取配置来改变自己的行为
2配置伴随应用的整个生命周期配置贯穿应用整个生命周期
3配置可以有多种加载方式可通过配置文件、环境变量、启动参数、数据库等方式加载
4配置需要治理区分开发、测试、生产;区分不同的集群

2)配置中心特性 

配置中心特性
1配置项容易读取和修改
2分布式环境下应用配置的可管理性,即提供远程管理配置的能力
3致辞对配置的修改的检视以把控风险
4可以查看配置修改的历史记录
5不同部署环境下应用配置的隔离性

二、Nacos

1、Nacos简介

        Nacos致力于帮助您发现、配置和管理微服务。它是阿里的一个开源产品,是针对微服务架构中的服务发现,配置管理,服务治理的综合型解决方案,能帮助更加敏捷和容易地构建、交付和管理微服务平台。

2、Nacos特性

Nacos特性描述
1服务发现与服务健康检查更容易注册,通过DNS或HTTP接口发现服务;实时对服务进行健康检查
2动态配置管理消除了在更新配置时重新部署应用程序,这使配置的更新更加高效和灵活
3动态DNS服务提供基于DNS协议的服务发现能力,旨在支持异构语言的服务发现
4服务和元数据管理可以从微服务平台视角,管理数据中心的所有服务及元数据

3、配置中心对比

对比项目Spring Cloud ConfigApolloNacos
配送实时推送支持(Spring Cloud Bus)支持(HTTP长轮询1S内)支持(HTTP长轮询1S内)
版本管理支持(Git)支持支持
配置回滚支持(Git)支持支持
灰度发布支持支持不支持
权限管理支持(依赖Git)支持不支持
多集群支持支持支持
多环境支持支持支持
监听查询支持支持支持
多语言支持Java主流语言,Open API主流语言,Open API
配置格式校验不支持支持支持
单机读(QPS)7(限流所致)900015000
单机写(QPS)5(限流所致)11001800
3节点读(QPS)21(限流所致)2700045000
3节点写(QPS)5(限流所致)33005600

三、Nacos快速入门

1、安装包

nacos-server-1.1.4https://www.aliyundrive.com/s/2cUubQYMSX9

2、启动服务器

 3、界面访问

本地地址http://127.0.0.1:8848/nacos/index.html
账号密码账号:nacos 密码:nacos

4、OPEN API 配置管理测试

1)用ApiPost或者Postman发布配置请求

127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld

2)界面查看配置

5、Nacos连接外部Mysql存储

        单机模式下,Nacos默认使用嵌入式数据库实现数据的存储,若想使用外部Mysql存储Nacos数据,需要进行以下步骤:

1)安装数据库

        MySQL:5.6.5+,MySQL 8 以下

2)初始化数据库

初始化MySQL数据库名,将nacos-mysql.sql导入

3)修改配置文件application.properties

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=

四、Nacos配置入门

1、发布配置[界面操作]

2、Nacos客户端获取配置[入门]

1)新建Maven项目

2)pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.dgs</groupId>
    <artifactId>Nacos01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

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

</project>

五、Nacos配置管理模型

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

配置集(Data ID)

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

配置项(配置内容)

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

配置分组(Group)

        配置分组是对配置集进行分组,通过一个有意义的字符串(如Buy或Trade)来表示,不同的配置分组下可以有相同的配置集(Data ID)。当您再Nacos上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_GROUP。配置分组的常见场景:可用于区分不同的项目或应用。

命名空间(Namespace) 

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

六、Nacos配置管理应用于分布式系统

1、微服务架构

        将应用分解为小的、相互连接的微服务,避免了开发一个巨大的单体式的应用,而是将应用分解为小的、互相连接的微服务。

        一个微服务一般完成某个特定的功能,比如订单服务、用户服务等等。每一个微服务都是完整应用,都有自己的业务逻辑和服务

2、分布式应用配置管理

  • 用户通过Nacos Server的控制台集中对多个服务的配置进行管理。
  • 各服务统一从Nacos Server中获取各自的配置,并监听配置的变化。

3、Nacos整合Springboot

1)新增命名空间dev 

2)在dev命名空间发布两个配置

① Nacos1.yaml②Nacos2.yaml

3)创建Maven父工程

4)Maven版本配置

5)Maven父工程添加pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.dgs</groupId>
    <artifactId>NacosTest</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
<!--  后面加入子工程,pom依赖中就会有这个
    <modules>
        <module>Nacos1</module>
        <module>Nacos2</module>
    </modules>-->
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF‐8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF‐8</project.reporting.outputEncoding>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- spring cloud alibaba 2.1.0.RELEASE-->
            <dependency>
                <groupId>com.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.SR3</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>
</project>

6)新建子工程Nacos1

 

7)子工程Nacos1添加pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>NacosTest</artifactId>
        <groupId>com.dgs</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>Nacos1</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.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>

</project>

8)Nacos1子工程,新增配置文件

9)Nacos1子工程,添加Springboot启动类 

10)Nacos1子工程,添加Controller,获取远程Nacos配置文件内容 

11)启动测试

12)新增子工程Nacos2,同Nacos1

13)新增子工程Nacos2的配置文件

14)新增子工程Nacos2启动类

15)Nacos2子工程,添加Controller,获取远程Nacos配置文件内容 

16)启动测试

4、自定义扩展的 Data Id 配置 

Spring Cloud Alibaba Nacos Config 可支持自定义的Data Id 的配置。

通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

spring:
  application:
    name: service2
  cloud:
    nacos:
      config:
        server‐addr: 127.0.0.1:8848
        # config external configuration
        # 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
        ext‐config[0]:
          data‐id: ext‐config‐common01.properties
        # 2、Data Id 不在默认的组,不支持动态刷新
        ext‐config[1]:
          data‐id: ext‐config‐common02.properties
          group: GLOBALE_GROUP
        # 3、Data Id 既不在默认的组,也支持动态刷新
        ext‐config[2]:
          data‐id: ext‐config‐common03.properties
          group: REFRESH_GROUP
          refresh: true
  • 通过spring.cloud.nacos.config.ext-config[n].data-id 的配置方式来支持多个Data Id的配置
  • 通过spring.cloud.nacos.config.ext-config[n].group 的配置方式自定义Daya Id 所在的租,默认DEFAULT_GROUP
  • 通过spring.cloud.nacos.config.ext-config[n].refresh的配置方式来控制该Data Id 在配置变更时,是否支持应用中科动态刷新,感知到最新的配置值。默认是不支持

5、自定义共享 Data Id 配置

spring:
  cloud: 
    nacos: 
      config: 
        shared‐dataids: ext‐config‐common01.properties,ext‐config‐common02.properties 
          refreshable‐dataids: ext‐config‐common01.properties
  • 通过spring.cloud.nacos.config.shared-dataids 来支持多个共享Data Id的配置,多个之前用逗号隔开。
  • 通过spring.cloud.nacos.config.refreshable-dataids 来支持哪些共享配置的Data Id 在配置变化时,应用中是否可动态刷新,感知到最新的配置值,多个Data ID 之间用逗号隔开。如果没明确配置,默认都不支持动态刷新
  • 它把group固定为DEFAULT_GROUP

6、配置优先级

A、通过内部相关规则(应用名、扩展名) 自动生成相关的Data Id配置

B、多个扩展Data Id

C、多个共享Data Id

A>B>C

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐