SpringCloud (五) :Nacos 服务配置中心【Finchley版】


这篇文章我们一起来学习一下服务配置中心,使用阿里巴巴开源的 Nacos 。

为什么需要配置中心?

为什么需要配置中心?主要可以从一下两方面去思考:

  1. 在分布式系统中,你的系统都是集群化部署的,几台、十几台、成百上千台,如果不使用配置中心将配置统一管理,当有一个改动的时候,你需要登录到一台一台机器上逐一修改,几台机器还好,成百上千台机器的话,这画面有点可爱了。所以这是使用配置中心的原因之一。
  2. 有时候我们会在代码里写一些常量,改动的概率很小,但是也有可能改动,在代码中硬编码可能不太合适。将这些变量移入到配置中心,可以解决硬编码的问题。

使用 Nacos 作为配置中心

我们先启动 nacos 服务,进入到 nacos 的控制台,来创建配置信息。

创建配置

官方文档上说明命名空间用来区分不同环境的配置信息,开发环境、测试环境、生产环境等,所以我们安装官方文档来,先创建DevTestProd这三个命名空间,分别新增user-server.yaml配置信息。
新建配置
里面新增一个active.profile配置,值就自己定义,能区别就行。参数说明一下:

  • Data ID
    data ID采用的是 ${spring.application.name}-${spring.profiles.active}.${file-extension:properties}这种格式,当${spring.profiles.active}没有设置的时候就是${spring.application.name}.${file-extension:properties}格式。我们设置的为user-server.yaml,我们没有设置${spring.profiles.active}的值,不要被中间的-误导了,我们的应用名${spring.application.name}=user-server${file-extension}=yaml
  • Group
    不修改,使用默认值DEFAULT_GROUP
  • 配置格式
    Data ID中的${file-extension}的值
  • 配置内容
    配置信息,我们以前在springboot里面的application.yaml的内容全部移到这里

创建应用

我们创建一个nacos-config-server项目,对项目进行如下改造

1、pom.xml

pom.xml中引入nacos-config的依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>0.2.2.RELEASE</version>
</dependency>
2、创建ConfigController
@RestController
// 自动刷新配置
@RefreshScope
public class ConfigController {

    @Value("${active.profile:''}")
    String activeProfile;

    @Value("${ext.profile:''}")
    String extValue;

    @GetMapping("/active-profile")
    public String activeProfile(){
        return activeProfile;
    }

    @GetMapping("/ext-config")
    public String extValue(){
        return extValue;
    }
}

3、创建bootstrap.properties

这次我们不在resource下面创建application.yaml文件了,而是创建bootstrap.properties,注意这个地方一定不能错,一定要叫bootstrap.properties。填入如下值:

# 服务端口
server.port=8089
# 应用名,与 nacos 配置服务器要一致
spring.application.name=user-server
#nacos 配置服务器地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 文件扩展名,与 nacos 配置服务器要一致
spring.cloud.nacos.config.file-extension=yaml
# 方法一 通过命名空间来区分不同环境,值在 nacos 服务器上获取。
spring.cloud.nacos.config.namespace=01ea0d93-7252-44f2-8e18-deb9f35519ca

启动nacos-config-server服务器,在浏览器中访问http://127.0.0.1:8089/active-profile,将显示:

test-profile

上面的spring.cloud.nacos.config.namespace设置的是test环境的值,所以读取的是test里面的内容

加载不同环境的配置信息

在开发springboot项目的时候,我们一般会建立三个配置文件,来区分不同环境的配置信息,那nacos中是如下区分的呢?

方法一

建立不同的命名空间,通过命名空间来区分不同环境的配置信息,然后在bootstrap.properties里面设置spring.cloud.nacos.config.namespace为对应的值就可以加载不同环境的配置信息。

方法二

因为Data ID的格式为${spring.application.name}-${spring.profiles.active}.${file-extension:properties},所以我们也可以像springboot一样,通过设置spring.profile.active来加载不同环境的配置信息,这个就需要将不同环境的配置文件建立在nacos的同一个命名空间下面,比如我们在public命名空间下面建立user-server-prod.yamluser-server-test.yaml两个配置信息。我们先来获取test环境的配置信息,我们将bootstrap.properties修改成:

server.port=8089
spring.application.name=user-server
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.file-extension=yaml

# 方法一 通过命名空间来区分不同环境
# spring.cloud.nacos.config.namespace=01ea0d93-7252-44f2-8e18-deb9f35519ca

# 方法二 通过 spring.profiles.active 的值来区分配置文件
spring.profiles.active=test

重启服务器,访问http://127.0.0.1:8089/active-profile,返回

test-profile

我们将spring.profiles.active改成prod,重启服务器,再次访问http://127.0.0.1:8089/active-profile,返回

prod-profile

这样也实现了加载不同环境的配置信息,如果用这种方式来加载不同环境的配置信息,我觉得可能需要将项目名作为命名空间会合适一些,官方说明的是通过命名空间来加载不同环境的配置信息,不知道是不是因为这种方式有问题,所以大家还是安装官方的来使用命名空间来加载不同环境的配置信息。

加载多配置文件

我们有时候项目可能不止一个配置文件,会有多个配置文件,比如日志的配置信息文件之类的,那在nacos中如何加载多配置文件呢?在nacos中也有两种方法来实现

方法一

利用ext-config来实现,ext-config是一个数组,我们可以利用它来加载其他配置文件,大概使用方式如下:

#需要加载的配置文件data id
spring.cloud.nacos.config.ext-config[0].data-id=ext-config.yaml
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
# 是否自动更新配置信息
spring.cloud.nacos.config.ext-config[0].refresh=true

spring.cloud.nacos.config.ext-config[1].data-id=ext1-config.yaml
spring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[1].refresh=true

其中ext-config[1]的数字越大,权重越高,会被优先加载

方法二

利用贡献配置文件的方式来加载多个配置

# 需要加载的配置文件data id,多个用,隔开
#spring.cloud.nacos.config.shared-dataids=ext-config.yaml
# 需要自动同步的配置文件
#spring.cloud.nacos.config.refreshable-dataids=ext-config.yaml

上面两种方法都可以实现加载多个配置文件,我们用第一中为例,在test环境下添加一个ext-config.yaml的配置信息,添加一条配置项ext.profile: 我是另一个配置文件,将bootstrap.properties修改成:

server.port=8089
spring.application.name=user-server
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.file-extension=yaml

# 方法一 通过命名空间来区分不同环境
spring.cloud.nacos.config.namespace=01ea0d93-7252-44f2-8e18-deb9f35519ca

# 方法二 通过 spring.profiles.active 的值来区分配置文件
# spring.profiles.active=prod

# 方法一 通过ext-config来加载多项配置 [n] n越大权重越高,优先加载
spring.cloud.nacos.config.ext-config[0].data-id=ext-config.yaml
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true

# 方法二 通过共享配置文件来加载配置信息
#spring.cloud.nacos.config.shared-dataids=ext-config.yaml
#spring.cloud.nacos.config.refreshable-dataids=ext-config.yaml

重新启动服务,我们先访问http://127.0.0.1:8089/active-profile,我们将得到跟上面一样的结果,说明没有影响我们加载主配置文件,我们在访问http://127.0.0.1:8089/ext-config,我们将得到

我是另一个配置文件

加载多个配置文件也成功了!

Demo 源码 Github

参考文档

nacos-config文档

在这里插入图片描述

扫码关注公众号(搜索公众号:平头哥的技术博文)一起交流学习呗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值