Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。
在一个微服务架构下,配置文件会随着微服务的增多,而变的越来越多,而且分散在各个微服务中,不好统一配置和管理,为了适应微服务的各个服务配置,我们引入了统一的Nacos配置管理中心来帮我们更加方便、安全的来管理我们的配置文件。
一、Config引入背景
1、文件相对分散
在一个微服务架构下,配置文件随着微服务的增多而增多,比较分散,不好统一配置和管理。
2、无法区分环境
微服务项目可能会有多个环境,例如:测试环境、开发环境、生产环境等等,每一个环境下的配置可能都不相同,手动切换很不方便。
3、无法实时更新
我们修改了配置文件之后,必须重新启动微服务才能使配置生效,无法达到服务的时效性。
4、安全无法保证
我们的配置文件当中,存储了很多安全信息,比如IP、账号、密码,必然会存在安全问题。
二、Config引入配置
本篇文章我们使用的是Nacos的Config配置中心,可能大家都使用并且听过其他配置中心,比如Spring Cloud Config配置中心,并且它的配置存储支持Git,不过它没有可视化的操作界面,配置的生效也不是实时的,需要重启或去刷新。以及其他的一些配置中心,比如Disconf、Apollo等,大家有兴趣可以去研究一下,本篇我们只研究Nacos的Config配置中心。
1、配置文件格式
1.1 命名空间(Namespace)
命名空间可用于进行不同环境的配置隔离,一般一个环境划分到一个命名空间。
1.2 配置分组(Group)
配置分组用于将不同的服务可以归类到同一分组,一般将一个项目的配置分到一组。
1.3 配置集(Data ID)
在系统中,一个配置文件通常就是一个配置集,一般微服务的配置就是一个配置集。
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix} -${spring.profile.active} .${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profile.active 即为当前环境对应的 profile(如、开发环境、测试环境、生产环境、预发布环境)
file-exetension 为配置内容的数据格式,目前只支持 properties 和 yaml 类型。
2、导入pom依赖
<dependency >
<groupId > com.alibaba.cloud</groupId >
<artifactId > spring-cloud-starter-alibaba-nacos-config</artifactId >
</dependency >
3、新建配置文件
服务名-环境前缀.文件格式 >>> dt-config-service-dev.yaml
完整yaml配置如下:
server:
port: 8084
spring:
application:
name: dt-config-service
cloud:
nacos:
discovery:
server-addr: 47.108 .191 .196 :9091
management:
endpoints:
exposure:
include: "*"
username: admin
password: 123456
4、添加bootstrap.yml配置文件
完整配置如下:
spring:
profiles:
active: dev
application:
name: dt-config-service
cloud:
nacos:
config:
enabled: true
server-addr: 47.108 .191 .196 :9091
file-extension: yaml
group: DEFAULT_GROUP
namespace: public
注意当你使用域名的方式来访问 Nacos 时,spring.cloud.nacos.config.server-addr 配置的方式为 域名:port。 例如 Nacos 的域名为abc.com.nacos,监听的端口为 80,则 spring.cloud.nacos.config.server-addr=abc.com.nacos:80。 注意 80 端口不能省略。
打印输出我们自定义的配置信息:
启动,先查看我们的端口是否正确,我们配置文件的端口号为8084:
6、配置的动态更新
上面我们在启动类中,获取到了我们自定义的参数,下面再来简绍一种使用注解的方式获取参数,spring-cloud-starter-alibaba-nacos-config 也支持配置的动态更新,新建一个控制器,只需要在需要动态读取配置的类上添加此注解就可以。
@RefreshScope
http://localhost:8084/api/getParams
此时我们修改我们的配置参数值,比如我们把密码修改成:654321,修改成功之后我们再请求一次。
可以发现我们请求的参数也改变了,nacos的config配置中心,默认开启的动态刷新配置,他的配置如下,默认是true,你可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新
当我们打开控制台查看记录,可以发现,config已经动态更新了我们的配置:
7、命名空间
在上面我们使用了默认的命名空间public,但在实际业务开发中,我们并不会使用默认的public命名空间来配置。
新建一个配置文件,和我们上面的配置的一样。
在配置文件中,指定命名空间ID:
8、权限控制
修改Nacos配置文件,开启权限认证,重新启动nacos。
当我们再重新启动服务的时候,发现报403错误了,没有权限访问nacos配置中心,这时候我们需要配置nacos的账号密码,即可:
重新启动项目:
9、配置文件读取权限控制
在实际生产当中,我们为了保障配置文件的安全性,一部分开发人员只能有只读权限或者只写权限,那么我们也可以新增不同的用户绑定不同的角色,从而操作不同的配置文件。
1.1 新建用户
1.2 绑定角色
1.3 角色授权
1.4 用户登录测试
当我们配置好了用户角色、权限之后,我们使用刚刚创建的账号admin登录,验证他是否只有只读权限。
然后我们切换到publish空间对配置文件进行修改:
发布失败,该用户只有可读权限,不能写,ok到这里基本结束了,我们的Nacos Config篇就算结束了。
我不敢休息,因为我没有存款;我不敢说累,因为我没有成就;我不敢偷懒,因为我还要生活;我能放弃选择,但是我不能选择放弃。所以坚强,拼搏是我唯一的选择。
本篇文章结束了,后面我们再继续深入研究微服务其他的组件的使用以及原理剖析,创作不易,喜欢的请关注小编CSDN:blog.csdn.net/qq_41107231 以及掘金:juejin.cn/user/394024…
1.1w
磊叔的技术博客
Spring Cloud
5220
MacroZheng
Spring Cloud
7491
MacroZheng
Spring Cloud