欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Cloud Alibaba-nacos多人开发实现环境隔离(namespace的引用)

程序员文章站 2022-07-15 10:16:41
...

echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075) 交流学习。


你是否碰到过多人协同开发的时候,经常会因为集群发现服务的原因最终调用的是他人的服务,调试的是时候经常发现读取到了一些你不需要的别人添加的配置,调用服务出现乱入测试等,本文就是解决这些问题的。

一个nacos怎么区分多环境

关键还是在于我们下图标记的group,我们可以看到这里的话默认添加的配置是default开头的,但是平时开发的时候,我们可以有意识的去加一些标记,比如把default改成为dev、test、pro等
Spring Cloud Alibaba-nacos多人开发实现环境隔离(namespace的引用)

使用配置group可以解决我们环境的隔离,但是隔离的力度还不够,假如多人协同开发这一个项目,我们一个dev开头并不能解决问题。

nacos的命名空间的引用(解决多人开发环境隔离的开始)

namespace在阿里设计的起初原因是:namespace主要是进行业务隔离的,多个业务或者部门可以用一个Nacos,但是数据都相互屏蔽。这里是不是和我们的需要解决的问题很接近了?当你开启namespace之后,你的配置就能独属于你,这个时候,你就可以在独属于你的配置内添加其他分组的内容。

怎么创建命名空间

命名空间我们可以在nacos的管理界面看到,如下图:

Spring Cloud Alibaba-nacos多人开发实现环境隔离(namespace的引用)

  • 直接点击新建命名空间即可,注意命名空间是可以自动生成的

Spring Cloud Alibaba-nacos多人开发实现环境隔离(namespace的引用)

  • 完成之后我们就可以看到我们创建命名空间了

Spring Cloud Alibaba-nacos多人开发实现环境隔离(namespace的引用)

使用命名空间解决多人开发环境隔离问题

学会了使用命名空间我们,发现我们的配置都已经独立了,但是项目里面怎么使用这个独立的命名空间呢?

在我们的配置文件boostrap.yml中添加如下内容,你就可以获得这个独立的命名空间内的内容(namespace的值就是我们命名空间上生成的命名空间ID)

spring:
  cloud:
    nacos:
      config:
        server-addr: 192.168.22.71:8848
        namespace: 6a4e2b2e-1f17-48c2-9ec8-010fd7c0eb66

有了独立的命名空间,配置都独立了,但是重复添加配置却成了复杂的工作

刚刚生产的命名空间是啥也没有的,我们每个人都自己生成一个命名空间,那就要每个人一份配置,这样会产生大量的重复添加配置的工作。

Spring Cloud Alibaba-nacos多人开发实现环境隔离(namespace的引用)

nacos帮我们解决了这个问题,他拥有一个从某个空间克隆配置到另外一个空间的功能
Spring Cloud Alibaba-nacos多人开发实现环境隔离(namespace的引用)

这样我们就得到了很多的配置。

到这里是不是好像还没有解决我们的多人相互调用的问题?

很简单,我们有了独立的命名空间,配置就不再依赖我们的项目指定的名称也就是这个配置:

spring:
  application:
    name: spring-cloud-nacos-consumer-test

多个相互隔离解决方案

将我们的项目名称更改了就可以了,我们可以去添加一些特许的标记在项目名称后面。

相同的项目:甲将他命名称为如下
spring:
  application:
    name: spring-cloud-nacos-consumer-test
    
相同的项目:已将他命名称为如下
spring:
  application:
    name: spring-cloud-nacos-consumer-test

多分组的环境配置共享

当我们做好了分组之后,发现我们配置的都是我们自己项目的配置,很多其他项目分组的或者其他环境的配置我们都需要的情况下,我们好像没有办法拿到。如下面这种情况,假设:DEV使我们的开发分组,这个是我们开发某个项目去添加的,但是DEVAULT却是我们所有项目都必备的,那这里就存在了一个问题,怎么读取多个分组的配置文件?

Spring Cloud Alibaba-nacos多人开发实现环境隔离(namespace的引用)

extension-configs帮忙我们解决多分组配置问题

spring:
  cloud:
    nacos:
      config:
        server-addr: 192.168.22.71:8848
        namespace: 462743fb-8228-49e4-8896-1bc6e62c8ac6
        group: spring-cloud-nacos-consumer.yml
        file-extension: yaml
        extension-configs:
            - data-id: spring-cloud-nacos-consumer.yml
              group: DEV_GROUP
              refresh: true
            - data-id: spring-cloud-nacos-consumer.yml
              group: DEFAULT_GROUP
              refresh: true
  • 一个分组对应一个data-id + group
  • refresh:true代表的是动态配置开启

到这里为止,我们就已经完成了环境配置隔了,多环境隔离,同项目多人开发隔离,多分组的配置获取。