nacos配置中心

1、nacos配置中心

nacos同spring-cloud-config一样,可以作为一个配置中心,统一的来管理配置,可以配置多套环境,各个微服务可以按需到nacos配置中心拉取相关配置,且支持动态刷新@RefreshScope

2、nacos配置中心的相关属性

后面我们会创建一个微服务来读取nacos配置中心的配置文件信息

在这里插入图片描述

注意:这里只能是yaml不能是yml

在这里插入图片描述

  1. 命名空间namespace可以区分部署环境,Group和DataID逻辑上区分两个目标对象

  2. 三者关系图

  3. 在这里插入图片描述

  4. Nacos默认的命名空间是public,namespace主要用来实现隔离,例如:开发、测试、生产我们用三个不同的namespace。

  5. Group默认为DEFAULT_GROUP,可以把不同的微服务划分到同一个分组。

  6. Service就是微服务,一个service可以包含多个Cluster集群,可以容灾。

  7. Instance为集群中的实例。

3、创建一个客户端

父工程pom环境

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.6.5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2021.0.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2021.0.1.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

该客户端部分配置从nacos客户端来拉取配置

在这里插入图片描述

  • 导入nacos-config依赖:
<dependencies>
    <!--value注入时要用 bootstrap-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>
    <!--nacos服务发现-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        <version>2.2.0.RELEASE</version>
    </dependency>
    <!--nacos配置中心-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <!--sentinel-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    <!--web-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--图形化处理-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <version>2.6.5</version>
    </dependency>
    <!--热部署-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <version>2.6.5</version>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
  • yaml和bootstrap

使用nacos作为配置中心时,需要创建一个bootstrap.yamlapplication.yaml两个配置文件,bootstrap.yaml的优先级高于application.yaml,加载时实现加载bootstrap.yaml中的相关配置

  • 配置文件

    • bootstrap.yaml
    server:
      port: 8403
    
    spring:
      application:
        name: cloudalibaba-config-service
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848    #注册中心地址
          config:
            server-addr: localhost:8848   #配置中心地址
            file-extension: yaml  #后缀名
            group: devGroup      #分组
            namespace: c14f418f-bede-4627-a15b-799595757619  #命名空间的id
    
    • application.yaml
    spring:
      profiles:
        active: dev   #激活的环境
    
    • 这两个配置文件合起来就是从配置中心拉取命名空间id为c14f418f-bede-4627-a15b-799595757619下的devGroup组下的cloudalibaba-config-service-dev.yaml配置文件信息
    • 文件名的默认组成:【命名空间id】 【分组】 {cloudalibaba-config-service}-{spring.profiles.active}.{file-extension}
    • 对应关系如下图所示:

在这里插入图片描述

  • 主启动类
package com.qiumin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @Author: qiumin
 * @Description: love code
 * @Date: Created in 16:18 2022/4/12
 */
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApplication8403 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigApplication8403.class,args);
    }

}

  • controller
package com.qiumin;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: qiumin
 * @Description: love code
 * @Date: Created in 16:25 2022/4/12
 */
@RestController
@Slf4j
@RefreshScope //动态刷新
public class NacosConfigController {

    @Value("${config.info}")
    private String info;     //该属性值是从nacos配置中心拉取到的配置

    @GetMapping("/testConfig")
    public String testConfig(){
        return info;
    }
}
  • 启动测试
    • 访问localhost:8403/testConfig
    • 根据写的bootstrap.yaml和application.yaml读取的是nacos配置中心的 命名空间为 qiumin下的devGroup组下的cloudalibaba-config-service-dev.yaml文件的信息。

在这里插入图片描述

qiumin

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐