Nacos 数据模型(领域模型)
Namespace命名空间、Group分组、集群这些都是为了进⾏归类管理,把服务和配
置⽂件进⾏归类,归类之后就可以实现⼀定的效果,⽐如隔离
⽐如,对于服务来说,不同命名空间中的服务不能够互相访问调⽤
- Namespace:命名空间,对不同的环境进⾏隔离,⽐如隔离开发环境、测试环境和
⽣产环境 - Group:分组,将若⼲个服务或者若⼲个配置集归为⼀组,通常习惯⼀个系统归为
⼀个组 - Service:某⼀个服务,⽐如简历微服务
- DataId:配置集或者可以认为是⼀个配置⽂件
1、Namespace + Group + Service 如同 Maven 中的GAV坐标,GAV坐标是为了锁定
Jar,⼆这⾥是为了锁定服务
2、Namespace + Group + DataId 如同 Maven 中的GAV坐标,GAV坐标是为了锁定
Jar,⼆这⾥是为了锁定配置⽂件
最佳实践
Nacos抽象出了Namespace、Group、Service、DataId等概念,具体代表什么取决
于怎么⽤(⾮常灵活),推荐⽤法如下
概念 | 描述 |
---|---|
Namespace | 代表不同的环境,如开发dev、测试test、⽣产环境prod |
Group | 代表某项⽬,⽐如拉勾云项⽬ |
Service | 某个项⽬中具体xxx服务 |
DataId | 某个项⽬中具体的xxx配置⽂件 |
Nacos 配置中⼼
之前:Spring Cloud Config + Bus
Github 上添加配置⽂件
- 创建Config Server 配置中⼼—>从Github上去下载配置信息
- 具体的微服务(最终使⽤配置信息的)中配置Config Client—>ConfigServer获取配置信息
- 有Nacos之后,分布式配置就简单很多,Github不需要了(配置信息直接配置在Nacos server中),Bus也不需要了(依然可以完成动态刷新)
接下来
1、去Nacos server中添加配置信息
2、改造具体的微服务,使其成为Nacos Config Client,能够从Nacos Server中获取到配置信息
Nacos 服务端已经搭建完毕,那么我们可以在我们的微服务中开启 Nacos 配置管理克隆效果和导入导出效果一样
1)添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacosconfig</artifactId>
</dependency>
2)微服务中如何锁定 Nacos Server 中的配置⽂件(dataId)
通过 Namespace + Group + dataId 来锁定配置⽂件,Namespace不指定就默认public,Group不指定就默认 DEFAULT_GROUP
dataId 的完整格式如下
${prefix}-${spring.profile.active}.${file-extension}
- prefix 默认为 spring.application.name 的值,也可以通过配置项
spring.cloud.nacos.config.prefix 来配置。 - spring.profile.active 即为当前环境对应的 profile。 注意:当
spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼
接格式变成 $ {prefix}.${file-extension} - file-exetension 为配置内容的数据格式,可以通过配置项
spring.cloud.nacos.config.file-extension 来配置。⽬前只⽀持properties 和 yaml类型。
# nacos配置
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
# 集群中各节点信息都配置在这里(域名-VIP-绑定映射到各个实例的地址信息)
#用于指定同一集群
#cluster-name: BJ
# nacos config 配置
config:
server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
# 锁定server端的配置文件(读取它的配置项)
namespace: 76750041-3690-423e-bb44-d38c2918119e # 命名空间id
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
file-extension: yaml #默认properties
3)通过 Spring Cloud 原⽣注解 @RefreshScope 实现配置⾃动更新
package com.lagou.edu.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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 该类⽤于模拟,我们要使⽤共享的那些配置信息做⼀些事情
*/
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
// 和取本地配置信息⼀样
@Value("${lagou.message}")
private String lagouMessage;
@Value("${mysql.url}")
private String mysqlUrl;
// 内存级别的配置信息
// 数据库,redis配置信息
@GetMapping("/viewconfig")
public String viewconfig() {
return "lagouMessage==>" + lagouMessage + " mysqlUrl=>" +mysqlUrl;
}
}
Nacos配置中心之dataId扩展
思考:⼀个微服务希望从配置中⼼Nacos server中获取多个dataId的配置信息,可
以的,扩展多个dataId
# nacos config 配置
config:
server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
# 锁定server端的配置文件(读取它的配置项)
namespace: 76750041-3690-423e-bb44-d38c2918119e # 命名空间id
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
file-extension: yaml #默认properties
# 根据规则拼接出来的dataId效果:lagou-service-resume.yaml
#完整格式的话是${prefix}-${spring.profile.active}.${file-extension} spring.profile.active为空的话,去掉
#多个配置文件
ext-config[0]:
data-id: abc.yaml
group: DEFAULT_GROUP
refresh: true #开启扩展dataId的动态刷新,没有的话,不会实时刷新
ext-config[1]:
data-id: def.yaml
group: DEFAULT_GROUP
refresh: true #开启扩展dataId的动态刷新
Nacos配置中心之dataId优先级问题
优先级:根据规则⽣成的dataId > 扩展的dataId(对于扩展的dataId,[n] n越⼤优
先级越⾼)
相对于每个文件,key相同的时候
监听查询
监听哪个客户端对配置文件的监听
1)根据文件来查询哪个ip
2)根据ip(客户端)来查询监控了哪个配置文件
版权声明:本文为Quasimodo24原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。