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 # 命名空间idgroup: 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 # 命名空间idgroup: 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.yamlgroup: DEFAULT_GROUPrefresh: true #开启扩展dataId的动态刷新,没有的话,不会实时刷新ext-config[1]:data-id: def.yamlgroup: DEFAULT_GROUPrefresh: true #开启扩展dataId的动态刷新
Nacos配置中心之dataId优先级问题
优先级:根据规则?成的dataId > 扩展的dataId(对于扩展的dataId,[n] n越?优
先级越?)
相对于每个文件,key相同的时候