【微服务】Nacos(配置中心)

文章目录

1.AP和CP

1.基本介绍

image-20240327202049559

2.说明

image-20240327202206270

2.Nacos配置中心实例

1.架构图

image-20240327203108046

2.在Nacos Server加入配置
1.配置列表,加号

image-20240327203343601

2.加入配置
  • 这里的配置文件名需要跟application name一致(-dev前面的部分)

image-20240327203754183

3.点击发布,然后返回

image-20240327203906059

4.还可以编辑

image-20240327203924073

image-20240327203931321

3. 创建 Nacos 配置客户端模块获取配置中心信息
1.创建子模块 e-commerce-nacos-config-client5000

image-20240327204123547

2.pom.xml引入配置中心依赖
    <dependencies>
        <!-- 引入nacos的配置中心依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--引入nacos的服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- springboot web starter 用来监听端口-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 如果在子工程/模块指定了 version,则以指定为准 -->
        </dependency>
        <!--
        1. starter-actuator 是 springboot 程序的监控系统,可以实现健康检查,info 信息
        等
        2. 访问 http://localhost:10000/actuator 可以看到相关链接, 还可以做相关设置. -->
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 公共模块的jar包 -->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>e_commerce_center-common-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>
3.application.yml 指定当前为开发环境(对应于配置中心文件的-dev)
spring:
  profiles:
    active: dev # 指定当前环境为开发环境,对应于配置中心文件的-dev
4.bootstrap.yml(这个文件会在application.yml之前读取,也可作为配置文件) 配置服务注册和配置中心
  • 关于找到配置中心的文件的解释
    • localhost:8848可以找到配置中心
    • e-commerce-nacos-config-client + -dev可以找到配置文件的名字
    • yaml可以找到配置文件的后缀
server:
  port: 5000 # 配置服务端口

spring:
  application:
    name: e-commerce-nacos-config-client # 配置服务的名称,这里的name需要参考nacos配置中心里配置文件的名字
  cloud:
    nacos:
      # encos服务注册
      discovery:
        server-addr: localhost:8848
      # 配置中心
      config:
        server-addr: localhost:8848 # 查找到配置中心
        file-extension: yaml # 文件后缀

5.编写启动类
package com.sun.springcloud;

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

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/3/27 21:21
 * @Version 1.0
 */
@SpringBootApplication
@EnableDiscoveryClient // 开启nacos服务发现 
public class NacosConfigClientApplication5000 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientApplication5000.class, args);
    }
}

6.src/main/java/com/sun/springcloud/controller/NacosConfigController.java 编写业务类获取配置中心信息
package com.sun.springcloud.controller;

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

/**
 * Description: 获取配置中心的数据
 *
 * @Author sun
 * @Create 2024/3/27 21:27
 * @Version 1.0
 */
@RestController
@Slf4j
public class NacosConfigController {

    /* 使用Value注解可以获取配置中心中对应于这个微服务集群的配置文件的信息,注意:如果获取不到信息,则微服务直接启动不了 */
    @Value("${config.ip}")
    private String ip;

    @Value("${config.name}")
    private String name;

    @GetMapping("/nacos/config/mes")
    public String getConfigIpAndName() {
        return "ip:" + ip + " name:" + name;
    }
}

7.测试
1.首先确保Nacos启动
2.启动这个模块,浏览器访问http://localhost:8848/nacos/查看注册信息

image-20240327214404987

3.浏览器访问http://localhost:5000/nacos/config/mes查看结果

image-20240327214516431

4.Nacos配置中心细节
1.关于@Value注解引用的包

image-20240327214653811

2.配置中心的文件不可以是yml,只能是yaml
3.在项目初始化时,如果无法从配置中心获取数据,项目是启动不了的
4.bootstrap.yml 的优先级高于 application.yml
5.application name必须与配置中心的配置文件的名字对应(-dev之前)
6.@RefreshScope是springcloud的原生注解,可以实现配置信息自动刷新

image-20240327215903215

演示

image-20240327220026347

image-20240327220058148

image-20240327220123558

3.Nacos配置隔离

1.命名空间 + 分组 + Data ID管理配置
命名空间:按照环境隔离配置
  • development
  • testing
  • production
分组:按照业务类型来划分
  • 用户模块
  • 订单模块
Data ID:按照服务名,环境,文件后缀来配置
  • 格式:[application-name]-[environment].[file-extension]
  • 示例:
    • user-service-dev.yml
    • order-service-prod.yml
2.应用实例
1.需求分析

要为开发环境用户模块的一个服务指定配置文件

2.设置命名空间(namespace)
1.新建命名空间

image-20240328113752771

2.填写空间名和描述

image-20240328114046118

3.自动生成命名空间id

image-20240328114106230

3.分组设置(group)和 文件命名(data id)
1.新建配置

image-20240328125946056

2.进行配置

image-20240328125858970

3.bootstrap.yml 配置服务注册以及配置中心

image-20240328130224577

server:
  port: 5000 # 配置服务端口

spring:
  application:
    name: e-commerce-nacos-config-client # 配置服务的名称,这里的name需要参考nacos配置中心里配置文件的名字
  cloud:
    nacos:
      # nacos服务注册
      discovery:
        server-addr: localhost:8848 # nacos服务注册中心地址
      # 配置中心
      config:
        server-addr: localhost:8848 # 配置中心地址
        file-extension: yaml # 指定配置文件的格式
        group: user # 指定配置文件的分组
        namespace: 122114f8-b2eb-480a-9ef3-1f8d30446736 # 指定命名空间id

4.application.yml 指定dev环境(对应于data id的 -dev)也可以在启动的时候通过命令指定开发环境
spring:
  profiles:
    active: dev # 指定当前环境为开发环境

5.pom.xml 引入配置中心和服务发现的依赖
    <dependencies>
        <!-- 引入nacos的配置中心依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--引入nacos的服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- springboot web starter 用来监听端口-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 如果在子工程/模块指定了 version,则以指定为准 -->
        </dependency>
        <!--
        1. starter-actuator 是 springboot 程序的监控系统,可以实现健康检查,info 信息
        等
        2. 访问 http://localhost:10000/actuator 可以看到相关链接, 还可以做相关设置. -->
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 公共模块的jar包 -->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>e_commerce_center-common-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>
6.编写启动类 开启服务发现
package com.sun.springcloud;

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

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/3/27 21:21
 * @Version 1.0
 */
@SpringBootApplication
@EnableDiscoveryClient // 开启nacos服务发现
public class NacosConfigClientApplication5000 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientApplication5000.class, args);
    }
}

7.编写业务类,读取配置文件@RefreshScope实现配置信息自动刷新
package com.sun.springcloud.controller;

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;

/**
 * Description: 获取配置中心的数据
 *
 * @Author sun
 * @Create 2024/3/27 21:27
 * @Version 1.0
 */
@RestController
@RefreshScope // 实现配置信息自动刷新
public class NacosConfigController {

    /* 使用Value注解可以获取配置中心中对应于这个微服务集群的配置文件的信息,注意:如果获取不到信息,则微服务直接启动不了 */
    @Value("${config.ip}")
    private String ip;

    @Value("${config.name}")
    private String name;

    @GetMapping("/nacos/config/mes")
    public String getConfigIpAndName() {
        return "ip:" + ip + " name:" + name;
    }
}

8.启动测试

image-20240328131812655

image-20240328131818457

3.流程说明
1.首先创建一个模块
2.为这个模块在配置中心指定一个配置文件,按照命名空间 + 分组 + Data ID管理配置
3.编写模块的bootstrap.yml 配置端口、服务注册以及配置中心
4.编写application.yml 指定环境
5.编写启动类,开启服务发现并执行测试
4.关于使用Nacos配置中心,配置文件的读取顺序(后面的会覆盖前面的)
  • bootstrap.yml
  • application.yml
  • application-prod.yml(还可以是-test,-dev)
  • 配置中心文件
  • 启动时命令行指定配置

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 10:54:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 10:54:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 10:54:05       82 阅读
  4. Python语言-面向对象

    2024-03-29 10:54:05       91 阅读

热门阅读

  1. 课时78:流程控制_until循环_嵌套案例

    2024-03-29 10:54:05       45 阅读
  2. C# 多线程编程:线程锁与无锁并发

    2024-03-29 10:54:05       33 阅读
  3. 每天学习一个Linux命令之uptime

    2024-03-29 10:54:05       36 阅读
  4. mongodb中的字符串排序

    2024-03-29 10:54:05       39 阅读
  5. vivado 调试术语

    2024-03-29 10:54:05       40 阅读
  6. 车流量智能监测识别系统---豌豆云

    2024-03-29 10:54:05       34 阅读