- 第一代实现: Spring Cloud Netflix
- 第二代实现: Spring Cloud Alibaba
2018 年 12 月12 日,Netflix 公司宣布 Spring Cloud Netflix 系列大部分组件都进入维护模式,不再添加新特性。这严重地限制了 Spring Cloud 的高速发展,于是各大互联网公司和组织开始把目光转向 Spring Cloud 的第二代实现:Spring Cloud Alibaba。
Spring Cloud Alibaba 是阿里巴巴结合自身丰富的微服务实践而推出的微服务开发的一站式解决方案,是 Spring Cloud 第二代实现的主要组成部分。吸收了 Spring Cloud Netflix 的核心架构思想,并进行了高性能改进。自 Spring Cloud Netflix 进入停更维护后,Spring Cloud Alibaba 逐渐代替它成为主流的微服务框架。 Sentinel:阿里巴巴开源产品,把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Nacos:阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 RocketMQ:Apache RocketMQ™ 基于 Java 的高性能、高吞吐量的分布式消息和流计算平台。 Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。 Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。 Alibaba Cloud OSS:阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。 Alibaba Cloud SchedulerX:阿里中间件团队开发的一款分布式任务调度产品,支持周期性的任务与固定时间点触发任务。 Alibaba Cloud SMS:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。通过 Spring Cloud Alibaba 的这些组件,我们只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
Nacos
Nacos 英文全称为 Dynamic Naming and Configuration Service 由阿里巴巴团队使用 Java 语言开发的开源项目。根据英文可以看出 Nacos 由 3 部分组成:组成部分 | 全称 | 描述 |
---|---|---|
Na | Naming/NameServer | 即服务注册中心,与 Spring Cloud Eureka 的功能类似。 |
co | Configuration | 即配置中心,与 Spring Cloud Config+Spring Cloud Bus 的功能类似。 |
s | Service | 即服务,表示 Nacos 实现的服务注册中心和配置中心都是以服务为核心的。 |
Nacos是注册中心 + 配置中心的组合, Nacos = Eureka + Config + Bus
主要作用:替代Eureka做服务注册中心;替代Config做服务配置中心 # Nacos 两大组件&服务注册中心 ## 两大组件 与 Eureka 类似,Nacos 也采用 CS(Client/Server,客户端/服务器)架构,它包含两大组件,如下表组件 | 描述 | 功能 |
---|---|---|
Nacos Server | Nacos 服务端,与 Eureka Server 不同,Nacos Server 由阿里巴巴团队使用 Java 语言编写,用户只需要直接下载并运行即可。 | Nacos Server 可以作为服务注册中心,帮助 Nacos Client 实现服务的注册与发现。 |
Nacos Server 可以作为配置中心,帮助 Nacos Client 在不重启的情况下,实现配置的动态刷新。 | ||
Nacos Client | Nacos 客户端,通常指的是微服务架构中的各个服务,由用户自己搭建,可以使用多种语言编写。 | Nacos Client 通过添加依赖 spring-cloud-starter-alibaba-nacos-discovery,在服务注册中心(Nacos Server)中实现服务的注册与发现。 |
Nacos Client 通过添加依赖 spring-cloud-starter-alibaba-nacos-config,在配置中心(Nacos Server)中实现配置的动态刷新。 |
服务注册中心
Nacos 作为服务注册中心可以实现服务的注册与发现,流程如下图- 服务注册中心(Register Service):它是一个 Nacos Server,可以为服务提供者和服务消费者提供服务注册和发现功能
- 服务提供者(Provider Service):它是一个 Nacos Client,用于对外服务。它将自己提供的服务注册到服务注册中心,以供服务消费者发现和调用
- 服务消费者(Consumer Service):它是一个 Nacos Client,用于消费服务。它可以从服务注册中心获取服务列表,调用所需的服务
- 从 Nacos 官方提供的下载页面中,下载 Nacos Server 并运行。
- 服务提供者 Nacos Client 启动时,会把服务以服务名(spring.application.name)的方式注册到服务注册中心(Nacos Server);
- 服务消费者 Nacos Client 启动时,也会将自己的服务注册到服务注册中心;
- 服务消费者在注册服务的同时,它还会从服务注册中心获取一份服务注册列表信息,该列表中包含了所有注册到服务注册中心上的服务的信息(包括服务提供者和自身的信息);
- 在获取了服务提供者的信息后,服务消费者通过 HTTP 或消息中间件远程调用服务提供者提供的服务。
安装和运行Nacos
当前时间版本最新是 2.1.1 ,那我们就以这个为列来安装和运行
:::info
- 进入下载页面,GitHub下载地址
:::
:::info
- 下载后解压,目录结构如下、各目录说明如下:
- bin:用于存放 Nacos 的可执行命令
- conf:用于存放 Nacos 配置文件
- target:用于存放 Nacos 应用的 jar 包
:::
:::info
- 打开命令行窗口,进入到 Nacos 安装目录的 bin 下,执行以下命令以单机模式启动 Nacos Server。
:::
startup.cmd -m standalone
启动日志如下
- 默认账号/密码:nacos/nacos
Nacos 注册中心使用案例
以下示例说明了如何向 Nacos Nacos项目搭建的对应版本,可以参考官方GitHub仓库的WiKi说明:版本说明 · alibaba/spring-cloud-alibaba Wiki :::warning 说明:我们创建两个服务提供者和一个服务消费者,来展示注册中心的使用方法和步骤,整体的大纲如下 结构如下 + spring-cloud-alibaba-demo:父项目,下面三个子项目全部引用这个 - spring-cloud-alibaba-nacos-provider-8001:服务提供者 8001 端口 - spring-cloud-alibaba-nacos-provider-8002:服务提供者 8002 端口(后续验证Nacos注册中心负载均衡操作) - spring-cloud-alibaba-nacos-consumer-8801:服务消费者 8801 端口,用来消费提供者接口
pom
文件即可。
xml
<?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>
<!-- 一定要加 -->
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.chen</groupId>
<artifactId>spring-cloud-alibaba-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>
<spring.cloud.version>2021.0.1</spring.cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
### 1. 创建Moudlle(SpringBoot项目)
spring-cloud-alibaba-nacos-provider-8001

pom
文件
xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--父工程-->
<parent>
<groupId>com.chen</groupId>
<artifactId>spring-cloud-alibaba-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.chen</groupId>
<artifactId>spring-cloud-alibaba-nacos-provider-8001</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-cloud-alibaba-nacos-provider-8001</name>
<description>spring-cloud-alibaba-nacos-provider-8001</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
### 3. 修改配置文件 *.yml&*.<font style="color:rgb(0, 0, 0);">properties</font>
yaml
server:
port: 8002
spring:
application:
name: chen-nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
### 4. 启动类调整
java
package com.chen.springcloudalibabanacosprovider8001;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient//开启服务注册与发现功能
public class SpringCloudAlibabaNacosProvider8001Application {
public static void main(String[] args) {
SpringApplication.run(SpringCloudAlibabaNacosProvider8001Application.class, args);
}
}
### 5. controller层
java
package com.chen.springcloudalibabanacosprovider8001.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class NacosProviderApplication {
@Value("${server.port}")
private String serverPort = null;
@GetMapping("/provider/nacos/{id}")
public String getResult(@PathVariable("id") Integer id) {
String rspBody = "<h2>小陈童鞋您好,本次数据查询成功!</h2>服务名:spring-cloud-alibaba-provider<br /> 端口号: " + serverPort + "<br /> 传入的参数:" + id;
return rspBody;
}
}
:::info
最终浏览器调用结果如下:



pom
文件
xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--父工程-->
<parent>
<groupId>com.chen</groupId>
<artifactId>spring-cloud-alibaba-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.chen</groupId>
<artifactId>spring-cloud-alibaba-nacos-consumer-8801</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-cloud-alibaba-nacos-consumer-8801</name>
<description>spring-cloud-alibaba-nacos-consumer-8801</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--由于 Netflix Ribbon 进入停更维护阶段,因此新版本的 Nacos discovery 都已经移除了 Ribbon ,此时我们需要引入 loadbalancer 代替 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
### 3. 修改配置文件 *.yml&*.<font style="color:rgb(0, 0, 0);">properties</font>
yaml
server:
port: 8801
spring:
application:
name: chen-nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#以下配置信息并不是默认配置,是我们自定义的配置,目的是不在 Controller 内硬编码服务提供者的服务名
service-url:
nacos-user-service: http://chen-nacos-provider #服务提供者的服务名
### 4. 启动类调整
java
package com.chen.springcloudalibabanacosconsumer8801;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient//开启服务注册与发现功能
public class SpringCloudAlibabaNacosConsumer8801Application {
public static void main(String[] args) {
SpringApplication.run(SpringCloudAlibabaNacosConsumer8801Application.class, args);
}
}
### 5. controller层
java
package com.chen.springcloudalibabanacosconsumer8801.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RestController
public class NacosConsumerApplication {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverURL; //服务提供者的服务名
@GetMapping("/consumer/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id) {
return restTemplate.getForObject(serverURL + "/provider/nacos/" + id, String.class);
}
}
:::info
结果:我们访问我们消费者的Controller,发现最终会映射到我们的提供者身上


java
package com.chen.springcloudalibabanacosconsumer8801.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ApplicationContextBean {
@Bean
@LoadBalanced //与 Ribbon 集成,并开启负载均衡功能
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
3. controller
java
package com.chen.springcloudalibabanacosconsumer8801.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RestController
public class NacosConsumerApplication {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverURL; //服务提供者的服务名
@GetMapping("/consumer/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id) {
return restTemplate.getForObject(serverURL + "/provider/nacos/" + id, String.class);
}
}
再次访问,同一个地址会映射到两套不通端口的服务上去:



pom
文件
使用配置中心核心需要引入这一个依赖:
xml
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--父工程-->
<parent>
<groupId>com.chen</groupId>
<artifactId>spring-cloud-alibaba-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.chen</groupId>
<artifactId>spring-cloud-alibaba-config-client-9001</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-cloud-alibaba-config-client-9001</name>
<description>spring-cloud-alibaba-config-client-9001</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--SpringCloud2020及以后的版本默认不启用 bootstrap 配置,我们需要在pom里面显式地引入:-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
### 3. 配置文件配置
这里需要配置两个,一个bootstrap
和一个application
。
:::info
原因:Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。
:::
springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application。
+ 全局的放在:bootstrap.yml+ 自己的放在:application.yml ** bootstrap.yml
yaml
server:
port: 9001
spring:
application:
name: chen-nacos-config # 配置中心名称
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 # 配置中心注册地址
file-extension: yaml #指定yaml配置格式
application.yml
yaml
spring:
profiles:
active: dev #激活 dev 环境配置
bootstrap + application 就表示我要去配置中心找名为chen-nacos-config-dev.yaml
的文件
### 4. 主启动类
java
package com.chen.springcloudalibabaconfigclient9001;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudAlibabaConfigClient9001Application {
public static void main(String[] args) {
SpringApplication.run(SpringCloudAlibabaConfigClient9001Application.class, args);
}
}
### 5. 业务类
通过Spring Cloud原生注解@RefreshScope** 实现配置自动更新
java
package com.chen.springcloudalibabaconfigclient9001.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;
@RestController
@RefreshScope //配置自动更新
public class ConfigClientController {
@Value("${config.info}")
private String ConfigInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return ConfigInfo;
}
}
### 6. 在Nacos控制台添加配置信息
:::info
Nacos中的配置规则:
说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
- prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
- spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当** spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}**
- file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
:::
注意nacos只识别yaml,不支持yml。最终公式:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
结果: chen-nacos-config<font style="color:rgb(51, 51, 51);background-color:rgb(248, 248, 248);">-dev.yaml</font>
配置新增
Data Id:配置规则如上
7. 测试
启动9001访问地址:http://localhost:9001/config/info 结果如下:
自带动态刷新:修改nacos中的yaml配置文件,再次调用查看配置,发现配置刷新了。
Nacos配置中心分类配置
:::info 分布式开发中的多环境多项目管理问题
实际开发中,通常一个系统会准备dev开发环境、test测试环境、prod生产环境。如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
:::
Nacos实现方式有三种:
- Namespace
- Group
- Data ID
Namespace+Group+Data ID三者关系类似Java里面的package名和类名,最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
用于进行租户粒度的配置隔离。不同的命名空间(Namespace)下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
默认情况:
Namespace=public,Group=DEFAULT_GROUP, 默认Cluster是DEFAULT
Nacos默认的命名空间是public,Namespace主要用来实现隔离。
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去
Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。
比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
最后是Instance,就是微服务的实例。
DataID使用配置
指定spring.profile.active
和配置文件的DataID
来使不同环境下读取不同的配置,如下:
通过spring.profile.active属性就能进行多环境下配置文件的读取
如果配置dev,请求地址 http://localhost:9001/config/info 响应如下
如果配置test,请求地址 http://localhost:9001/config/info 响应如下
Group使用配置
默认Group是DEFAULT_GROUP,现在通过Group实现环境分区
- 新建一个配置文件,添加DEV_GROUP分组和TEST_GROUP分组
- 在
application.yml
config下增加一条group
的配置即可。可配置为DEV_GROUP或TEST_GROUP
- 根据group配置请求 http://localhost:9001/config/info
namesapce使用配置
- 新建dev/test的Namesapce
- 回到服务管理 — 服务列表查看
- 在这两个新建的namespace中分别新建三个不同分组的配置文件
- 修改9001的yml文件
:::info DataID方案是在默认namesapce和默认Group下,创建两个不同的DataID。
Group方案是在默认namespace下,新建两个DataID相同的配置文件,通过指定不同的分组来读取不同的配置。
Namespace方案,是相同的Group,相同的DataID,创建并指定不同的namespace来读取不同配置。
:::