SpringCloud Alibaba Nacos-下
Nacos 配置中心实例
示意图
在Nacos Server 加入配置
- 进入到Nacos Server
- 加入配置, 特别提醒: 文件后缀.yaml 别忘了.
Data ID: e-commerce-nacos-config-client-dev.yaml
创建Nacos 配置客户端模块e-commerce-nacos-config-client5000
创建Module
先创建e-commerce-nacos-config-client5000 模块,参考以前的方法
修改pom.xml
<!--引入相关的依赖: 我们引入了当前需要的依赖,后面如果有其它需要,再灵活调整-->
<dependencies>
<!--加入nacos-config stater 即场景启动器 使用版本仲裁-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--引入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>
<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>
<!--引入e_commerce_center-common-api-->
<dependency>
<groupId>com.hspedu.springcloud</groupId>
<artifactId>e_commerce_center-common-api</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
创建application.xml
spring:
profiles:
active: dev #指定环境,常见的环境有 dev开发/test测试/prod生产
创建bootstrap.yml
-
nacos 配置客户端/当前的微服务模块, 会根据配置,找到配置中心的数据(配置文件)
-
config.server-addr: localhost:8848 可以找到配置中心
-
spring.application.name 对应是DataId e-commerce-nacos-config
-
在application.yml: 配置 spring.profiles.active dev
-
spring.cloud.nacos.config.file-extension 配置文件的扩展名 .yaml
-
小结: 根据配置 就是 到 localhost:8848 下的 e-commerce-nacos-config-dev.yaml 获取配置信息/数据
-
规则就是: s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name−{spring.profiles.active}.${spring.cloud.nacos.config.file-extension}来定位配置中心的 Data ID
server:
port: 20000 #端口
spring:
application:
#这里的name需要参考nacos 配置中心的Data Id
name: e-commerce-nacos-config-client
#配置nacos
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
创建主启动类NacosConfigClientApplication5000
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientApplication5000 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientApplication5000.class, args);
}
}
业务类创建NacosConfigClientController
@RestController
@Slf4j
@RefreshScope //spring cloud原生注解,实现了配置数据的自动刷新
public class NacosConfigClientController {
/**
* 1. client 会拉取nacos server 的 e-commerce-nacos-config-client-dev.yaml
* config:
* ip: "122.22.22.22"
* name: "大家好"
* 2. @Value("${config.ip}") 会将 config.ip 赋给 configIp
* 3. 这里${config.ip} 不能乱写,要有依据
*/
@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;
}
}
测试
1 启动Nacos Server
2 启动e-commerce-nacos-config-client5000
3 浏览器: http://localhost:5000/nacos/config/ip
注意事项和细节
-
NacosConfigClientController.java 的@Value(“${config.ip}”), 是import org.springframework.beans.factory.annotation.Value;而不是lombok 包下的.
-
配置文件application.yml 和bootstrap.yml 结合会得到配置文件/资源的地址
-
参考文档: https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
-
注意在Nacos Server 的配置文件的后缀是.yaml , 而不是.yml
-
在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动, 也就是说如果项目不能正确的获取到Nacos Server 的配置数据,项目是启动不了的.
-
springboot 中配置文件的加载是存在优先级顺序的, bootstrap.yml 优先级高于application.yml
-
@RefreshScope 是springcloud 原生注解,实现配置信息自动刷新, 如果在Nacos Server 修改了配置数据,Client 端就会得到最新配置[演示]
Nacos 分类配置(实现配置隔离)
DataID 方案
示意图
解决方案分析
使用Data ID 方案解决
配置实现
- 在nacos server 创建新的配置:e-commerce-nacos-config-client-test.yaml
修改application.yml
spring:
profiles:
active: text #指定环境,常见的环境有 dev开发/test测试/prod生产
测试
浏览器输入: http://localhost:5000/nacos/config/ip
Group 方案
需求分析/图解
配置实现
- 在nacos server 创建新的配置:order/e-commerce-nacos-config-client-dev.yaml
- 在nacos server 创建新的配置:seckill/e-commerce-nacos-config-client-dev.yaml
修改application.yml
spring:
profiles:
active: dev #指定环境,常见的环境有 dev开发/test测试/prod生产
修改bootstrap.yml
- 增加group 参数
server:
port: 20000 #端口
spring:
application:
#这里的name需要参考nacos 配置中心的Data Id
name: e-commerce-nacos-config-client
#配置nacos
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
group: search #指定search组,默认是DEFAULT_GROUP
测试
1 浏览器: http://localhost:5000/nacos/config/ip
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MfWwPJNv-1686312360306)(<转存失败,建议直接上传图片文件 …/%E5%9B%BE%E7%89%87/image-20230526074910029.png>)]
Namespace 方案
示意图
解决方案分析
1. 在nacos server 创建新的namespace , baidu 和alibaba
2. 在nacos server 创建新的group/dataid
修改application.yml
spring:
profiles:
active: dev #指定环境,常见的环境有 dev开发/test测试/prod生产
修改bootstrap.yml-下
增加Namespace 参数
server:
port: 20000 #端口
spring:
application:
#这里的name需要参考nacos 配置中心的Data Id
name: e-commerce-nacos-config-client
#配置nacos
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
group: search #指定search组,默认是DEFAULT_GROUP
namespace: e37564de-2e0a-4f79-96e9-23ac35b90936 #指定对应namespace id[阿里]
测试
浏览器输入: http://localhost:5000/nacos/config/ip
Namespace/Group/Data ID 关系
详解介绍
Nacos默认的命名空间是public,Namespace主要用来实现配置隔离, 隔离范围大
Group默认是DEFAULT GROUP,Group可以把不同的微服务划分到同一个分组里面去
Service就是微服务, 相同的Service可以是一个Cluster(簇/集群), Instance 就是微服务的实例