Nacos 配置中⼼-数据模型

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版权协议,转载请附上原文出处链接和本声明。