SpringCloud Alibaba 微服务实战六 - 配置隔离

本贴最后更新于 1805 天前,其中的信息可能已经时移俗易

导读:本篇作为 SpringCloud Alibaba 微服务实战系列的第六篇,主要内容是将所有的微服务接入 Nacos 配置中心并按环境进行隔离。系列文章,欢迎持续关注。

配置中心集成

在 SpringCloud Alibaba 体系中是使用 Nacos 作为配置中心,这样 Nacos 既可以作为注册中心也可以作为配置中心,相当于 SpringCloud 中的 Eureka + Config。要接入 Nacos 的配置中心也很简单,只需要如下几步:

  • 引入配置中心组件 spring-cloud-starter-alibaba-nacos-config
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  • 在 resource 中新建文件 bootstrap.yml,配置应用名称和注册中心地址
spring:
  application:
    name: account-service
  cloud:
    nacos:
      config:
        server-addr: 10.0.10.48:8848
        file-extension: yml

这里指定文件后缀为 yml

  • 在 nacos 控制台建立配置文件

注:在客户端和 server 端对文件格式的声明要一致,例如在客户端声明的是 yml,则 server 端添加配置文应该是 ${spring.application.name}.yml,若写成 ${spring.application.name}.yaml,则会找不到配置文件。
如在我们的 account-service 中应该建立一个 account-service.yml 文件,然后把原 application.yml 的内容复制到里面即可,在 nacos 配置中可以删除 spring.application.name 配置。
image.png

  • 运行测试
    测试服务功能是否正常

简单几步就可以将你的微服务集成 Nacos 的配置中心了,但是在实际开发中我们需要准备多个环境的配置文件(开发、测试、生产),接下来我们看看如何使用 Nacos 进行多环境配置管理。

多环境管理

在 Nacos 中实现多环境管理很容易,可以通过 Profiles, Group, Namespace 三个维度实现。

profiles

nacos 配置中心的 DATA ID 就相当于一个配置文件的名称,前面一部分我们 DATA ID 的默认命名方式为 ${spring.application.name}.${ spring.cloud.nacos.config.file-extension},比如我们之前的配置文件为 account-service.yml

如果我们在服务启动的时候指定了服务的环境名称 spring.profiles.active,那么 DATA ID 的命名方式就变成了 ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}。比如上面的 account-service 我们在 bootstrap.yml 中设置了 spring.profiles.active=DEV,那么服务启动时就会去 nacos 抓取 account-service-DEV.yml 这个配置文件的数据。

利用 Nacos 命名方式的特性我们可以实现多环境配置管理。

实战

  • 给系统指定环境名称
spring:
  profiles:
    active: DEV
  • Nacos 中建立多套环境的配置
    image.png

  • 启动应用,观察后端启动日志

2019-12-13 13:39:21,352 INFO  NacosPropertySourceBuilder:87 - Loading nacos data, dataId: 'account-service-DEV.yml', group: 'DEFAULT_GROUP'
2019-12-13 13:39:21,363 INFO  PropertySourceBootstrapConfiguration:101 - Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='account-service-DEV.yml'}, NacosPropertySource {name='account-service.yml'}]}
2019-12-13 13:39:21,376 INFO  AccountServiceApplication:652 - The following profiles are active: DEV

Group

Group 是 DATA ID 集合的概念,将同一个环境下的配置文件组成一个 Group,在服务启动时通过指定 spring.cloud.nacos.config.group 属性可以让系统加载不同 Group 的配置文件。

实战

  • 在 nacos 中建立多个配置文件,以 Group 进行区分
    image.png
    如上所示,我们建立了一个 DEV_GROUP 和 TEST_GROUP。

  • 修改配置文件,指定 spring.cloud.nacos.config.group 的值

spring:
  cloud:
    nacos:
      config:
        server-addr: 10.0.10.48:8848
        file-extension: yml
        group: DEV_GROUP

这个时候不需要再给服务指定 spring.profiles.active 属性

  • 启动应用,观察后端启动日志
2019-12-13 14:19:19,861 INFO  NacosPropertySourceBuilder:87 - Loading nacos data, dataId: 'account-service.yml', group: 'DEV_GROUP'
2019-12-13 14:19:19,869 INFO  PropertySourceBootstrapConfiguration:101 - Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='account-service.yml'}]}
2019-12-13 14:19:19,882 INFO  AccountServiceApplication:648 - No active profile set, falling back to default profiles: default

Namespace

Namespace 是 nacos 做多环境以及多租户数据(配置和服务)隔离的,目前也是官方推荐的多环境支持方案。如果你的微服务有多套不同的环境(DEV,TEST),那么这个时候可以根据指定的环境来创建不同的 namespce,以此来实现多环境的隔离。不同的命名空间下可以有相同的 GroupData ID

实战

  • Nacos 中根据项目环境建立多套 Namespace
    image.png
    建好 Namespace 后会生产一串命名空间 ID,在应用里通指定 spring.cloud.nacos.config.namespace 属性对应不同的 Namespace

  • 在不同的命名空间下分别建立配置文件 account-service.yml
    image.png

  • 修改配置文件,指定 spring.cloud.nacos.config.namespace 属性

spring:
  cloud:
    nacos:
      config:
        server-addr: 10.0.10.48:8848
        file-extension: yml
        namespace: 7e8ccc22-6f51-42fa-bcf1-db45f99dbf57
  • 启动应用,观察后端启动日志
    image.png
    这个版本没有关于 Namespace 的启动日志,不过你可以修改你的配置确认是否正常加载,反正我这里是正常的 O(∩_∩)O 哈哈~

Namespace 作为官方推荐的环境隔离配置,我们将所有的微服务全部按照此方式进行改造,改造完的效果如下:
image.png

改造完成后要对服务进行测试,保证服务能正常运行。

至此我们已经把我们微服务的配置全部放入了配置中心,并且使用 Namespace 对环境进行了隔离。那么本期的“SpringCloud Alibaba 微服务实战六 - 配置隔离”篇也就该结束啦,咱们下期有缘再见!
image.png

再见之前让我在求一波关注吧,O(∩_∩)O 哈哈~!
image.png

系列文章

  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 1 关注
  • 云计算
    78 引用 • 91 回帖 • 1 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    944 引用 • 1459 回帖 • 17 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • someone

    论与高度白酒之间的关系

  • someone
    作者

    😰