SpringCloud Alibaba——Nacos服务注册与配置中心(二作为服务配置中心)

Posted 张起灵-小哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud Alibaba——Nacos服务注册与配置中心(二作为服务配置中心)相关的知识,希望对你有一定的参考价值。

1.开篇

为什么叫Nacos?前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service。

Nacos是什么:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

在之前学习SpringCloud H版的时候,一般来说是用Eureka作为服务注册中心,Config + Bus来进行服务配置。那么现在有了阿里的Nacos,就完全可以替代前面说的那三个,也即:Nacos = Eureka + Config + Bus。

Nacos的官方文档:https://nacos.io/zh-cn   https://github.com/alibaba/nacos/

https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_nacos_discovery

有关Nacos的下载安装请参考:https://blog.csdn.net/weixin_43823808/article/details/119480692

上一篇文章说到Nacos作为服务注册中心的配置与实现,这篇文章来说一下Nacos作为服务配置中心。首先一个很大的区别就是Nacos作为服务注册中心的时候,我们的微服务模块只需要配置一个yml就可以了;而现在作为服务配置中心则需要两个!!!

原因:Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application。(也就是我必须先获取总的配置文件信息,然后再配置自己私有的信息)

之前学SpringCloud H版的Config + Bus时,为了实现动态刷新,需要@RefreshScope注解,还需要写其他很多东西。那么现在有了Nacos,有很多配置都不需要再写了,但是仍然需要这个注解 @RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。

更多配置信息,直接参考Nacos的官方文档:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

最终读取到配置文件的公式:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}


2.项目源码

github源码地址:https://github.com/2656307671/SpringCloud-Alibaba-Nacos

gitee源码地址:https://gitee.com/szh-forever-young/SpringCloud-Alibaba-Nacos

下面先演示Nacos作为服务配置中心的基本配置。这里只对应3377这一个微服务模块。

首先在Nacos的配置管理---配置列表中,新增一个配置文件、内容如下。(关于Data Id、Group、Namespace后面再说)

配置文件添加成功之后,我们到浏览器中测试,可以正常访问。

此时对刚刚添加的配置文件做一个修改,将version改为2。然后不用重启3377,直接再到浏览器中刷新刚才的访问页面,可以看到version也更新成了2。

这就是 @RefreshScope 注解实现了动态刷新功能。

下面再来说一下Nacos作为服务配置中心的分类配置。(什么是Data Id、Group、Namespace?)

实际开发中,通常一个系统会准备dev开发环境、test测试环境、prod生产环境。如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?

此时就需要Data Id、Group、Namespace这三者了。类似Java里面的package名和类名,最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。

默认情况:Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT。Data Id < Group < Namespace。Namespace类似于Java中的某个项目、某个微服务模块;Group类似于当前Java项目的某个包;Data Id类似于Java当前Java项目的某个包下的某个类。

下面先说一下Data Id的配置方案,对应yml中的spring.profiles.active。

首先在Nacos的配置列表中再新建一个配置文件,分组和刚才那个一样,都是默认分组。

这里,我们激活test测试环境。它读取到的将会是 nacos-config-client-test.yaml 。

下面再说一下Group的方案配置,对应yml中的group。

仍然是新建两个配置文件,这次不再是默认分组,它们俩分别属于两个不同的组。

这里通过yml中的group标签来确定到哪个组中寻找对应的配置文件。

此时找到的将是:nacos-config-client-info.yaml,因为是TEST_GROUP组中的info.yaml配置文件。

下面再说一下Namespace的方案配置,对应yml中的namespace。

首先找到命名空间,之前没有新建过,所以一直使用的Nacos默认的public命名空间。现在新建:dev命名空间、test命名空间。

这里通过yml配置,找到的将是:指定命名空间下的DEV_GROUP分组中的nacos-config-client-dev.yaml配置文件。

在dev这个命名空间下,新建三个配置文件,它们三个分别属于不同的分组(默认分组、DEV、TEST) 。

以上是关于SpringCloud Alibaba——Nacos服务注册与配置中心(二作为服务配置中心)的主要内容,如果未能解决你的问题,请参考以下文章

springcloud复习3

SpringCloud - Spring Cloud Alibaba 之 Nacos Config配置中心

springcloud+nacos+sentinel+dubbo搭建项目的一些关键配置和依赖

spring cloud 服务注册、发现了解

Nacos Config 配置中心攻略和详解

2021-11-22 spring-cloud-nacos配置优先级