跳转至

Spring Cloud Alibaba Nacos-服务注册与配置中心

官网:https://github.com/alibaba/nacosNacos官方中文手册

Nacos:Spring Cloud Alibaba服务注册与配置中心(非常详细) (biancheng.net)

Spring Cloud Alibaba系列-一文读懂Nacos原理 - 掘金 (juejin.cn)

1.什么是Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 主要功能包括:

  • 服务发现和注册
  • 配置管理
  • DNS 服务
  • 消息服务

Nacos的架构:

Nacos:架构理论基础: CAP 理论 (支持 AP 和 CP, 可以切换)

1.1Nacos两大组件

与 Eureka 类似,Nacos 也采用 CS(Client/Server,客户端/服务器)架构,它包含两大组件,如下表:

组件 描述 功能
Nacos Server Nacos 服务端,与 Eureka Server 不同,Nacos Server 由阿里巴巴团队使用 Java 语言编写并将 Nacos Server 的下载地址给用户,用户只需要直接下载并运行即可。 1. Nacos Server 可以作为服务注册中心,帮助 Nacos Client 实现服务的注册与发现。2. Nacos Server 可以作为配置中心,帮助 Nacos Client 在不重启的情况下,实现配置的动态刷新。
Nacos Client Nacos 客户端,通常指的是微服务架构中的各个服务,由用户自己搭建,可以使用多种语言编写。 1. Nacos Client 通过添加依赖 spring-cloud-starter-alibaba-nacos-discovery,在服务注册中心(Nacos Server)中实现服务的注册与发现。2. Nacos Client 通过添加依赖 spring-cloud-starter-alibaba-nacos-config,在配置中心(Nacos Server)中实现配置的动态刷新。

1.2Nacos服务注册中心

Nacos 作为服务注册中心可以实现服务的注册与发现,流程如下图。

Nacos 服务注册与发现

在图中共涉及到以下 3 个角色:

  • 服务注册中心(Register Service):它是一个 Nacos Server,可以为服务提供者和服务消费者提供服务注册和发现功能。
  • 服务提供者(Provider Service):它是一个 Nacos Client,用于对外服务。它将自己提供的服务注册到服务注册中心,以供服务消费者发现和调用。
  • 服务消费者(Consumer Service):它是一个 Nacos Client,用于消费服务。它可以从服务注册中心获取服务列表,调用所需的服务。

Nacos 实现服务注册与发现的流程如下:

  1. 从 Nacos 官方提供的下载页面中,下载 Nacos Server 并运行。
  2. 服务提供者 Nacos Client 启动时,会把服务以服务名(spring.application.name)的方式注册到服务注册中心(Nacos Server);
  3. 服务消费者 Nacos Client 启动时,也会将自己的服务注册到服务注册中心;
  4. 服务消费者在注册服务的同时,它还会从服务注册中心获取一份服务注册列表信息,该列表中包含了所有注册到服务注册中心上的服务的信息(包括服务提供者和自身的信息);
  5. 在获取了服务提供者的信息后,服务消费者通过 HTTP 或消息中间件远程调用服务提供者提供的服务。

2.Nacos服务注册中心

2.1Nacos Server使用

(1)下载Nacos Server

环境: Java8/Maven 3.2.x+

地址:Release 1.2.1(Mar 31th, 2020) · alibaba/nacos (github.com)

image-20230604132250256

(2)解压后,目录如下

image-20230604133500391

  • bin:用于存放 Nacos 的可执行命令。
  • conf:用于存放 Nacos 配置文件。
  • target:用于存放 Nacos 应用的 jar 包。

(3)点击运行bin目录的 startup.cmd

image-20230604133636648

(4)运行成功后的窗口:

image-20230604133721794

(5)使用浏览器访问 http://localhost:8848/nacos,跳转到 Nacos Server 登陆页面,如下图。

默认账号密码都是nacos

image-20230604134203850

2.2创建服务提供者-集群

image-20230604134406524

如下,先创建一个服务提供者的集群:member-service-nacos-provider-10004 和 member-service-nacos-provider-10006

2.2.1创建member-service-nacos-provider-10004

创建 member-service-nacos-provider-10004 并注册到 NacosServer8848

(1)创建子module:member-service-nacos-provider-10004

image-20230604135040422

(2)父工程的pom文件需要引入spring-cloud-alibaba-dependencies

<!--SpringCloud Alibaba-->
<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>

在该工程的 pom.xml 中,我们通过 dependencyManagement 对 Spring Cloud Alibaba 的版本信息进行管理,该工程下的各个子模块在引入 Spring Cloud Alibaba 的各个组件时就不要单独指定版本号了。

(3)修改member-service-nacos-provider-10004的pom.xml

    <!--引入相关的依赖,版本都使用父项目声明的版本-->
    <dependencies>
        <!--Spring Cloud Alibaba Nacos discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--web-starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--actuator-starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!--引入mybatis-starter,整合到springboot中-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <!--druid-starter-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>

        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--jdbc-starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--test-starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>com.li.springcloud</groupId>
            <artifactId>e_commerce_center_common-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>

(4)在 member-service-nacos-provider-10004 的配置文件 application.properties 中添加以下配置

server:
  port: 10004
spring:
  application:
    name: member-service-nacos-provider #配置应用的名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # Nacos Server的地址
#暴露所有的监控点
management:
  endpoints:
    web:
      exposure:
        include: '*'

(5)创建一个Controller类

package com.li.springcloud.controller;

import ...

/**
 * @author 李
 * @version 1.0
 */
@Controller
@Slf4j
public class MemberController {
    @Resource
    private MemberService memberService;

    @PostMapping("/member/save")
    @ResponseBody
    public Result save(@RequestBody Member member) {
        log.info("service-provider member={}", member);
        int affected = memberService.save(member);
        if (affected > 0) {
            return Result.success("添加会员成功-member-service-nacos-provider-10004", affected);
        } else {
            return Result.error("401", "添加会员失败");
        }
    }

    @GetMapping("/member/get/{id}")
    @ResponseBody
    public Result getMemberById(@PathVariable("id") Long id) {
        Member member = memberService.queryMemberById(id);
        if (member != null) {
            return Result.success("查询会员成功,member-service-nacos-provider-10004", member);
        } else {
            return Result.error("402", "Id=" + id + "用户不存在!");
        }
    }
}

(6)创建主启动类,使用 @EnableDiscoveryClient 注解开启服务发现功能

package com.li.springcloud;

import ...

/**
 * @author 李
 * @version 1.0
 */
@SpringBootApplication
//引入Nacos发现注解
@EnableDiscoveryClient
public class MemberNacosProviderApplication10004 {
    public static void main(String[] args) {
        SpringApplication.run(MemberNacosProviderApplication10004.class, args);
    }
}

(7)使用浏览器访问 http://localhost:8848/nacos,查看“服务管理”下的“服务列表”,如下图

image-20230604142327148

从上图可以看到,我们搭建的服务提供者 member-service-nacos-provider-10004 所提供的服务已经被注册到了 Nacos Server 上了。

(8)浏览器访问 localhost:10004/member/get/1,结果如下

image-20230604142521474

2.2.2创建 member-service-nacos-provider-10006

创建过程略,参考member-service-nacos-provider-10004

  1. 创建新模块member-service-nacos-provider-10006
  2. 修改member-service-nacos-provider-10006 的pom.xml
  3. 在 member-service-nacos-provider-10006 的配置文件 application.properties 中添加配置
  4. 创建一个Controller类
  5. 创建主启动类

创建完毕之后,再使用浏览器访问 http://localhost:8848/nacos,查看“服务管理”下的“服务列表”,可以看到消费者的实例数变为2

image-20230604143456689

访问 localhost:10006/member/get/1,结果如下

image-20230604143801023

2.3创建服务消费者

image-20230604144058084

创建 member-service-nacos-consumer-80 并注册到 NacosServer8848

(1)创建子模块 member-service-nacos-consumer-80

(2)修改子模块的pom文件

<!--引入相关的依赖,版本都使用父项目声明的版本-->
<dependencies>
    <!--引入alibaba-nacos,使用版本仲裁-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

    <!--web-starter-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--actuator-starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

    <dependency>
        <groupId>com.li.springcloud</groupId>
        <artifactId>e_commerce_center_common-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

(3)配置application.yml

server:
  port: 80
spring:
  application:
    name: member-service-nacos-consumer-80
  #配置nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos server地址

(4)创建主启动类,使用 @EnableDiscoveryClient 注解开启服务发现功能

package com.li.springcloud;

import ...

/**
 * @author 李
 * @version 1.0
 */
@SpringBootApplication
@EnableDiscoveryClient
public class MemberNacosConsumerApplication80 {
    public static void main(String[] args) {
        SpringApplication.run(MemberNacosConsumerApplication80.class, args);
    }
}

(5)创建一个名为 CustomizationBean 的配置类,并使用 @LoadBalanced 注解与 Ribbon 进行集成开启负载均衡功能

package com.li.springcloud.config;

import ...

/**
 * @author 李
 * @version 1.0
 */
@Configuration
public class CustomizationBean {
    //nacos 本身就集成了 Ribbon, 直接支持 Ribbon+RestTemplate 调用
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

(6)创建一个名为 MemberNacosConsumerController 的 Controller 类

package com.li.springcloud.controller;

import ...

/**
 * @author 李
 * @version 1.0
 */
@RestController
@Slf4j
public class MemberNacosConsumerController {
    //要求这里的服务名要小写,和服务 Nacos Server中注册名保持一致
    public static final String MEMBER_SERVICE_NACOS_PROVIDER_URL =
            "http://member-service-nacos-provider";

    @Resource
    private RestTemplate restTemplate;

    @PostMapping("/member/nacos/consumer/save")
    public Result<Member> save(Member member) {
        return restTemplate.postForObject(MEMBER_SERVICE_NACOS_PROVIDER_URL
                + "/member/save", member, Result.class);
    }

    @GetMapping("/member/nacos/consumer/get/{id}")
    public Result<Member> getMemberById(@PathVariable("id") Long id) {
        return restTemplate.getForObject(MEMBER_SERVICE_NACOS_PROVIDER_URL
                + "/member/get/" + id, Result.class);
    }
}

(7)启动member-service-nacos-consumer-80,访问 查看 Nacos Server 的服务列表

image-20230604152844899

(8)浏览器访问:http://localhost/member/nacos/consumer/get/1,成功访问,并且可以看到消费者调用服务提供方的负载均衡算法是轮询(默认)

image-20230604153041435

image-20230604153059088

(9)如果要修改负载均衡算法,可以创建配置类指定:

package com.li.springcloud.config;

import ...

/**
 * @author 李
 * @version 1.0
 * 配置自己的负载均衡算法
 */
@Configuration
public class RibbonRule {
    //注入指定的均衡算法
    @Bean
    public IRule myRibbonRule(){
        //这里指定RandomRule
        return new RandomRule();
    }
}

3.Nacos AP和CP切换

  • 各种注册中心对比
对比项目 Nacos Eureka Consul CoreDNS Zookeeper
一致性协议 CP+AP AP CP CP
健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
负载均衡策略 权重/metadata/Selector Ribbon Fabio RoundRobin
雪崩保护
自动注销实例 支持 支持 不支持 不支持 支持
访问协议 HTTP/DNS HTTP HTTP/DNS DNS TCP
监听支持 支持 支持 支持 不支持 支持
多数据中心 支持 支持 支持 不支持 不支持
跨注册中心同步 支持 不支持 支持 不支持 不支持
SpringCloud集成 支持 支持 支持 不支持 不支持
Dubbo集成 支持 不支持 不支持 不支持 支持
K8S集成 支持 不支持 支持 支持 不支持
  • AP 还是 CP ?

  • CP:服务可以不能用,但必须要保证数据的一致性。

  • AP:数据可以短暂不一致,但最终是需要一致的,无论如何都要保证服务的可用。

  • 取舍:只能在 CP 和 AP 选择一个平衡点, 大多数都是选择 AP 模式

CAP原则又称CAP定理,指的是在一个分布式系统中的,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)

  • Nacos 的 AP 和 CP 切换

参考:Nacos中AP和CP模式如何切换 - 简书 (jianshu.com)

Nacos 集群默认支持的是CAP原则中的AP原则,但是也可切换为CP原则(一般不切换)

  • CURL切换命令:curl -X PUT $NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP
  • URL指令: $NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP

4.Nacos配置中心

4.1什么是配置中心

在分布式微服务系统中,几乎所有服务的运行都离不开配置文件的支持,这些配置文件通常由各个服务自行管理,以 properties 或 yml 格式保存在各个微服务的类路径下,例如 application.properties 或 application.yml 等。

这种将配置文件散落在各个服务中的管理方式,存在以下问题:

  • 管理难度大:配置文件散落在各个微服务中,难以管理。
  • 安全性低:配置跟随源代码保存在代码库中,容易造成配置泄漏。
  • 时效性差:微服务中的配置修改后,必须重启服务,否则无法生效。
  • 局限性明显:无法支持动态调整,例如日志开关、功能开关。

为了解决这些问题,通常我们都会使用配置中心对配置进行统一管理。市面上开源的配置中心有很多,例如百度的 Disconf、淘宝的 diamond、360 的 QConf、携程的 Apollo 等都是解决这类问题的。Spring Cloud 也有自己的分布式配置中心,那就是 Spring Cloud Config。这里以Nacos为例。

4.2Nacos作为配置中心

Nacos Server 还可以作为配置中心,对 Spring Cloud 应用的外部配置进行统一地集中化管理。而我们只需要在应用的 POM 文件中引入 spring-cloud-starter-alibaba-nacos-config 即可实现配置的获取与动态刷新。

从配置管理的角度看,Nacos 可以说是 Spring Cloud Config 的替代方案,但相比后者 Nacos 的使用更简单,操作步骤也更少。

例子

image-20230604160954834

4.2.1在NacosServer中加入配置

(1)启动 Nacos Server,并在 Nacos Server 控制台的“配置管理”下的“配置列表”中,点击“+”按钮

image-20230604161526862

(2)新建如下配置

image-20230604161934656

(3)然后点击”发布“

image-20230604162050022

4.2.2创建Nacos配置客户端模块

(1)创建子模块e-commerce-nacos-config-client5000

(2)修改子模块的pom.xml,加入nacos-config

<!--引入相关的依赖,版本都使用父项目声明的版本-->
<dependencies>
    <!--Spring Cloud Alibaba Config 依赖-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>

    <!--SpringCloud ailibaba nacos 服务注册与发现模块 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

    <!--web-starter-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--Spring Boot 监控模块-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

    <dependency>
        <groupId>com.li.springcloud</groupId>
        <artifactId>e_commerce_center_common-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

(3)创建 application.yml

spring:
  profiles:
    active: dev #指定环境,常见的环境有dev开发/test测试/prod生产环境

(4)创建 bootstrap.yml(还是在resources文件下)

server:
  port: 5000 #端口号
spring:
  application:
    #需要参考nacos server的Data Id
    name: e-commerce-nacos-config-client #服务名
  #配置nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置

#解释:nacos 配置客户端,会根据配置,找到资源获取配置文件
#1) config-server-addr: localhost:8848
#2) spring.application.name 对应 DataId: e-commerce-nacos-config-client
#3) spring.profiles.active dev
#4) spring.cloud.nacos.config.file-extension 文件扩展名) .yaml
#也是就到 localhost:8848 下的 e-commerce-nacos-config-client-dev.yaml获取配置信息

#规则总结: 
#${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

在 Nacos Server 中,配置的 dataId(即 Data ID)的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}

dataId 格式中各参数说明如下:

  1. ${prefix}:默认取值为微服务的服务名,即配置文件中 spring.application.name 的值,我们可以在配置文件中通过配置 spring.cloud.nacos.config.prefix 来指定。
  2. ${spring.profiles.active}:表示当前环境对应的 Profile,例如 dev、test、prod 等。当没有指定环境的 Profile 时,其对应的连接符也将不存在, dataId 的格式变成 {prefix}.{file-extension}。
  3. ${file-extension}:表示配置内容的数据格式,我们可以在配置文件中通过配置项 spring.cloud.nacos.config.file-extension 来配置,例如 properties 和 yaml。

(5)添加主启动类

package com.li.springcloud;

import ...

/**
 * @author 李
 * @version 1.0
 */
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientApplication5000 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientApplication5000.class, args);
    }
}

(6)添加一个业务类

package com.li.springcloud.controller;

import ...

/**
 * @author 李
 * @version 1.0
 */
@RestController
@Slf4j
public class NacosConfigClientController {
    /**
     * 1. client 会拉取 Nacos Server 的 e-commerce-nacos-config-client-dev.yaml
     * 2. @Value("${config.ip}") 会将 config.ip 赋给 configIp
     */
    @Value("${config.ip}")
    private String configIp;

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

    @GetMapping("/nacos/config/ip")
    public String getConfigIp() {
        return configIp;
    }

    @GetMapping("/nacos/config/name")
    public String getConfigName() {
        return configName;
    }
}

(7)顺序启动 Nacos Server,e-commerce-nacos-config-client5000,在浏览器访问: http://localhost:5000/nacos/config/iplocalhost:5000/nacos/config/name,结果如下

image-20230604170346851 image-20230604170420564

访问成功,说明 e-commerce-nacos-config-client5000 成功从Nacos中获取了配置数据。

4.2.3注意事项

  1. 配置文件 application.yml 和 bootstrap.yml 结合会得到配置文件/资源的地址
  2. 参考文档: https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
  3. 注意在 Nacos Server 的配置文件的后缀是 .yaml , 而不是 .yml
  4. 在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动, 也就是说如果项目不能正确的获取到 Nacos Server 的配置数据,项目是启动不了的
  5. springboot 中 配置文件的加载是存 在优先级顺序的,bootstrap.yml 优先级高于application.yml
  6. @RefreshScope 是 springcloud 原生注解,实现配置信息自动刷新, 如果在 Nacos Server 修改了配置数据,Client 端就会得到最新配置

例子

  1. 在业务类添加@RefreshScope注解,并重启

image-20230604172258360

  1. 在 Nacos Server 修改配置数据

image-20230604172452248

  1. Nacos Server 修改配置数据后不重启 e-commerce-nacos-config-client5000,直接访问 http://localhost:5000/nacos/config/name ,可以看到获取的配置数据自动更新了

image-20230604172705983

5.Nacos分类配置(实现配置隔离)

参考:https://blog.csdn.net/cxkjntm123/article/details/129547730

在微服务体系中,一个系统往往被拆分为多个服务,每个服务都有自己的配置文件,然后每个系统往往还会准备开发环境、测试环境、正式环境。

假设某系统有10个微服务,那么至少有10个配置文件,三个环境(dev\test\prod),那就有30个配置文件需要进行管理。这么多的配置文件,要修改一个或者多个的时候,稍有不慎可能就会出现改错了、不生效…等等问题。

引入Nacos作为配置中心后,如何有效的进行配置文件的管理和不同环境间的隔离区分呢?

5.1DataID方案

需求:

image-20230604175752717

(1)在 nacos server 创建新的配置:e-commerce-nacos-config-client-test.yaml

image-20230604180121411

image-20230604180223982

(2)修改 application.yml文件,将原来的dev修改为test,就可以获取到不同的配置文件数据

spring:
  profiles:
    active: test #指定环境,常见的环境有dev开发/test测试/prod生产环境

(3)重启 e-commerce-nacos-config-client5000,访问 http://localhost:5000/nacos/config/name

image-20230604180529711

5.2Group方案

需求:

image-20230604180725038

(1)在 nacos server 创建两个新的配置:e-commerce-nacos-config-client-dev.yaml,组名分别为 order和seckill

image-20230604182131005 image-20230604184341179

image-20230604184605369

(2)修改application.yml文件,指定开发环境

spring:
  profiles:
    active: dev #指定环境,常见的环境有dev开发/test测试/prod生产环境

(3)修改bootstrap.yml文件,指定group的名称

server:
  port: 5000 #端口号
spring:
  application:
    #需要参考nacos server的Data Id
    name: e-commerce-nacos-config-client #服务名
  #配置nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: order #指定组名称,默认为”DEFAULT_GROUP“

(4)重启 e-commerce-nacos-config-client5000,访问 http://localhost:5000/nacos/config/name

image-20230604190137911

5.3Namespace方案

例子:

image-20230604190309823

(1)在 Nacos Server 中创建两个不同的命名空间

image-20230604190930205

image-20230604190615638

image-20230604190815559

这时在配置列表中可以看到多了两个命名空间:

image-20230604191107478

(2)分别在两个命名空间下创建新的配置

alibaba命名空间:

image-20230604191619588

image-20230604191544602

baidu命名空间:

image-20230604191953273

image-20230604191924066

(3)修改 application.yml,指定环境

spring:
  profiles:
    active: dev #指定环境,常见的环境有dev开发/test测试/prod生产环境

(4)修改bootstrap.yml文件,指定group,namespace的名称

server:
  port: 5000 #端口号
spring:
  application:
    #需要参考nacos server的Data Id
    name: e-commerce-nacos-config-client #服务名
  #配置nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: seckill # 指定组名,默认为 DEFAULT_GROUP
        namespace: 96bfb0c9-54e1-4a94-bd2c-6cde5a114d35 # namespace id

image-20230604192453911

(5)重启 e-commerce-nacos-config-client5000,访问 http://localhost:5000/nacos/config/name

image-20230604192745292

5.4Namespace/Group/Data ID关系

img

在这里插入图片描述

  • Nacos 默认的命名空间是 public,Namespace 主要用来实现配置隔离,隔离范围大
  • Group 默认是 DEFAULT GROUP,Group 可以把不同的微服务划分到同一个分组里面去
  • Service 就是微服务,相同的 Service 可以是一个 Cluster(簇/集群),Instance 就是微服务的实例