SpringCloud Alibaba 使用Nacos作为配置中心及配置隔离讲解

Posted 小毕超

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud Alibaba 使用Nacos作为配置中心及配置隔离讲解相关的知识,希望对你有一定的参考价值。

一、Nacos作为服务配置中心

在上篇文章中我们讲解了使用Nacos作为配置中心,本篇我们继续讲下Nacos的配置中心功能。

上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/122101863

在前我们讲解Spring Cloud 全家桶的文章中我们讲解了Spring Cloud Config 作为配置中心,配置主要存放在了Git中,但应该可以发现一些不足之处,比如没有一个可视化的页面管理配置信息,还有在修改配置后需要通知服务去刷新配置,即使整合了Bus,也要调用Config Server端的接口。而新一代的Nacos 就已经完善了这些问题,可以让我们更加方便的管理配置。

有兴趣的小伙伴也可以看下Spring Cloud Config的使用过程,可以参考下面我的博客:

SpringCloud H版 Config 配制中心讲解:https://blog.csdn.net/qq_43692950/article/details/122024549

SpringCloud H版 Config+Bus 实现全局配制刷新:https://blog.csdn.net/qq_43692950/article/details/122025347

下面就让我们体验下Naocs配置中心的功能,在开始前请安装好Nacos。

二、使用Nacos作为配置中心

新建一个SpringBoot 的 Module ,在pom中引入以下依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<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>

<dependency>
    <groupId>com.bxc</groupId>
    <artifactId>common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

其中common使我们在前几篇文章中写的公共的module,主要封装了controller 的返回,如果不添加,将controller的返回修改为自己的即可。

下面修改配置文件,注意不要写在application.yml 中,需要新建一个bootstrap.yml文件,写在bootstrap.yml中,用来在程序引导时执行。

server:
  port: 8080

spring:
  application:
    name: nacos-config-client
  profiles:
    active: dev # 表示开发环境
#    active: test # 表示测试环境
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.40.1:8848
      config:
        server-addr: 192.168.40.1:8848
        file-extension: yaml

management:
  endpoint:
    shutdown:
      enabled: false
  endpoints:
    web:
      exposure:
        include: "*"

主启动类:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApplication 
    public static void main(String[] args) 
        SpringApplication.run(NacosConfigApplication.class, args);
    

启动服务:

我们的服务已经注册到nacos中了,下面开始在nacos中新建配置信息:

首先我们在默认的命名空间和默认的组下,新建个配置文件。


上面主要点我标记出来了,其中需要注意的是Data ID 的命名规范是
$spring.application.name-$spring.profiles.active.$spring.cloud.nacos.config.file-extension,所以根据我们上面我们的配置信息 Data ID 的命名就应该是 nacos-config-client-dev.yaml
配置内容我们可以填写:

param: 
  text: abc
  name: ggg

配置完成后点发布即可。

下面在我们项目中新建一个读取配置信息的类:

@Component
@ConfigurationProperties(prefix = "param")
@Data
@RefreshScope
public class ParamProperties 
    private String text;
    private String name;

注意添加上@RefreshScope注解,可以实现配置内容动态刷新,下面可以看到这个效果。

再新建一个测试入口:

@Slf4j
@RestController
@RequestMapping("config")
public class ConfigController 

    @Autowired
    ParamProperties paramProperties;

    @GetMapping("/getConfig")
    public ResponseTemplate getConfig() 
        log.info("text: ", paramProperties.getText());
        log.info("name: ", paramProperties.getName());
        return ResSuccessTemplate.builder().build();
    

重启项目,在浏览器中访问: http://localhost:8080/config/getConfig ,查看控制台打印的信息:

可见已经读取到了我们的配置信息,下面可以在nacos中修改下配置内容:

对内容加了个55,点击发布、确认发布,后再次请求接口:

可见我们在没有重启服务器的情况下,就已经刷新了配置内容,但是前提是添加了@RefreshScope注解。

三、命名空间和分组

上面已经实现了动态配置功能,但是仔细想想还是有些问题,比如我们服务的数量特别多,每个配置都存放在 public 命名空间下,配置那么多也有些不好管理。甚至有可能造成误修改的错误。因此nacos提供者了 命名空间Namespace 和分组 Group 以及Cluster 的隔离方式。

默认情况:

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,就是微服务的实例。

下面我们实现对 Namespace 和 Group 进行配置的隔离:

首先在Nacos 中新建一个 Namespace :



将命名空间的ID配置到我们的项目中,修改配置文件:

spring:
  application:
    name: nacos-config-client
  profiles:
    active: dev # 表示开发环境
#    active: test # 表示测试环境
    #active: info
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.40.1:8848
      config:
        server-addr: 192.168.40.1:8848
        file-extension: yaml
        group: TEST_GROUP
        namespace: c6e530b7-5d09-4a51-ad44-9b0c9e39fc11

主要添加了 group 和 namespace 两个配置,其中 namespace 就是对应上面的 命名空间ID ,group 我们在新建配置时,指定为 TEST_GROUP。

下面在myconfig的命名空间下,新建配置:


其中这里的分组Group就填写上面,我们在项目中配置的 TEST_GROUP,下面点击发布,并重启我们的项目。

在浏览器中访问: http://localhost:8080/config/getConfig ,查看控制台打印的信息:

已经读取到我们这个命名空间 和 分组下的配置信息。


喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!

以上是关于SpringCloud Alibaba 使用Nacos作为配置中心及配置隔离讲解的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud Alibaba开篇

Day397.SpringCloud Alibaba -谷粒商城

SpringCloud学习 —— SpringCloud Alibaba Nacos服务注册和配置中心

Spring Cloud Alibaba(简介)

SpringCloud(Alibaba版)Nacos配置中心

阿里疯传“SpringCloud Alibaba”学习笔记