笔者所在的团队采用了Spring Cloud+Nacos微服务技术方案落地后,在实际进行中遇到问题。通常一个项目的开发会拆分为dev开发环境、test测试环境以及prod生产环境,而不同环境都依赖于Nacos注册中心。
最初,我们是各个环境都搭建了一套Nacos注册中心和配置中心,而Nacos会占用资源比较大,这样相当于需要3个环境的Nacos都启起来才支持开发。
接着,更多的项目要采用Spring Cloud+Nacos这一套微服务框架,将需要占用更多的机器,更多的Nacos注册中心。如果就这样无限扩展,相信越到后面,服务器资源占用将进入死循环,越占越多。
为了解决以上问题,我们重新对Nacos技术进行了深入的研究和探索。最终发现Nacos本来就提供了Namespace命名空间+Group分组来隔离环境,一个Nacos机器起起来,是可以通过Namespace命名空间+Group分组支持环境无限扩展,通过资源隔离,也就解决了我们的资源扩展问题。
下面将对此进行分享。
Nacos引入了命名空间(Namespace)的概念来进行多环境配置和服务的管理及隔离
Namespace也是官方推荐的多环境支持方案。
当我们的服务达到一定的数量,集中式的管理许多服务会十分不便,
那我们可以将这些具有相同特征或属性的服务进行分组管理,服务对应的配置也进行分组隔离
这里的分组就是Namespace的概念,将服务和配置纳入相同的Namespace进行管理
不同Namespace下的服务和配置之间就隔离开来
NamespaceId值是在配置文件配置时必须要填入的配置项,所以需要我们先创建Namespace和Id,步骤如下:
(1)nacos 的控制台左边功能栏看到有一个命名空间的功能,点击就可以看到新建命名空间 的按钮
(2)新建成功后,可以在命名空间列表中查看到你所创建的Namespace和他生成的ID值
启动Nacos-Server,进入Nacos控制台,切换到Namespace:dev界面,新建配置文件
DataId:nacos-namespace-dashan-dev.yml
Group:namespace-dashan
配置格式:YAML
配置内容:
nacos:
config: 项目:nacos-namespace-dashan,Namespace:dev
继续新建配置文件
DataId:nacos-namespace-dashantwo-dev.yml
Group:namespace-dashantwo
配置格式:YAML
配置内容:
nacos:
config: 项目:nacos-namespace-dashantwo,Namespace:dev
切换到Namespace:test环境,按照dev中的创建方式,分别创建 nacos-namespace-dashanone-test.yml和 nacos-namespace-dashantwo-test.yml
注意检查DataId是否正确、group、配置内容与环境是否匹配
创建Nacos启动项目,在bootstrap.yml文件中加入:
server:
port: 81-1
spring:
application:
name: nacos-namespace-dashanone
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: edbd013b-b178-44f7-8caa-e73071e49c4d
group: namespace-dashanone
config:
server-addr: 127.0.0.1:8848
prefix: ${spring.application.name}
file-extension: yml
namespace: edbd013b-b178-44f7-8caa-e73071e49c4d
group: namespace-dashanone
创建test环境配置文件bootstrap-dev.yml:
server:
port: 8812
spring:
application:
name: nacos-namespace-dashanone
profiles:
active: test
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 0133bd1e-25c3-4985-96ed-a4e34efdea2e
group: namespace-dashanone
config:
server-addr: 127.0.0.1:8848
prefix: ${spring.application.name}
file-extension: yml
namespace: 0133bd1e-25c3-4985-96ed-a4e34efdea2e
group: namespace-dashanone
重复以上操作,再创建一个名为nacos-namespace-dashantwo的子项目
nacos-namespace-dashantwo项目的dev和test启动端口分别设置为8901和8902,group为:namespace-dashantwo
记得修改spring.application.name、namespace和group
启动项目
观察Nacos控制台:
这样不同环境的配置文件就实现了隔离
配置列表样例:
具体操作:
1.在bootstrap.properties配置文件中加入配置: spring.cloud.nacos.config.group=组名
2.在Nacos配置列表中新建配置
3.配置发布后启动项目查看日志
可以看出Group已经改变
4.说明:
spring.cloud.nacos.config.group 默认为DEFAULT_GROUP
样例:
具体操作:
1.在Nacos命名空间中新建命名空间
2.新建命名空间
3.确认后
4.此时返回配置列表,可以看到已经配置好的命名空间
5.切换到TEST空间,并添加一条配置
6.在bootstrap.properties配置文件中加入配置:
spring.cloud.nacos.config.namespace=命名空间ID
这样当项目启动之后,不同命名空间可以看到不同的服务:
通过Nacos的Group分组和Namespace环境隔离,很好的解决了服务区分问题,避免了资源占用过大
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有