最新版Spring Cloud Alibaba微服务架构-Config配置中心篇(很细)

930 阅读6分钟

前言

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

 <!--SpringCloud-ailibaba-config配置中心-->
 <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 #配置Nacos地址
management:
  endpoints:
    web:
      exposure:
        include: "*"                    #健康检查
dt: 
  username: admin                       #自定义账号
  password: 123456                      #自定义密码

4、添加bootstrap.yml配置文件

在这里插入图片描述

完整配置如下:

spring:
  profiles:
    # 环境
    active: dev
  application:
   # 服务名
    name: dt-config-service
  cloud:
    nacos:
      config:
        # 是否开启配置中心 默认true
        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 端口不能省略。

5、测试

打印输出我们自定义的配置信息:

在这里插入图片描述

在这里插入图片描述

启动,先查看我们的端口是否正确,我们配置文件的端口号为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…