微服务系列之Nacos配置中心应用实践


Nacos简介

Nacos相关信息,我们这边就不过多介绍,可以直接点击官网查阅相关内容。本次我们主要针对我们自己的开发场景做实践分享。

如何进行配置隔离

我们可以根据官方文档提到的命名空间分组结合Nacos的权限管理功能来进行不同团队,不同项目,不同环境的配置隔离及管理。
(1)首先,我们内部拥有平台线,产品线及项目线3条开发线,有开发人员角色和测试人员角色,有开发环境dev,测试环境test,预发布环境stage,生产环境prod。
我们先来解决第(1)个内部研发管理的问题,希望通过一个配置中心,管理所有开发条线及所有项目的环境配置。
可以按照dev、test、stage、prod作为namespace来区分,然后将group按照平台组,产品组,项目A组,项目B组方式进行区分
在这里插入图片描述
虽然上图的方式可以使用,但是我们发现当项目多的时候,不好按区域或团队去管理,因为Group不支持层级管理,所以最终我们最终定下了以业务线条/团队为命名空间区分的配置方式(其中Project可以按区域作为命名空间),如下图所示:
在这里插入图片描述
(2)其次,我们发布出去的产品,需要提供给客户2套环境使用,用户测试环境uat,生产环境prod
客户环境生产和测试一般是隔离的,搭建的配置中心一般都是以单一环境为主,赋能不同产品或项目的上线使用,所以客户环境的出厂配置一般比较简单,如下图所示:
在这里插入图片描述

如何共享配置

Nacos提供了共享配置的属性,如下图所示:

spring:
  application:
    name: demo
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: 192.168.1.100:8848
        namespace: 22b12b94-df82-46eb-bc47-b6ea4e7437eb
        file-extension: yaml
        group: DEMO_GROUP
        shared-configs:
          - data-id: shared-redis-${spring.profiles.active}.yaml
            refresh: true
            group: DEMO_GROUP
          - data-id: shared-rabbitmq-${spring.profiles.active}.yaml
            refresh: true
            group: DEMO_GROUP

我们可以看到上面的shared-configs配置项,可以加载我们共享的配置,一般我们会按照数据库、消息队列、redis等按块独立出来配置作为共享配置,方便运维人员进行维护。

代码示例

依赖引入

<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
	<version>2021.1</version>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bootstrap</artifactId>
	<version>3.0.1</version>
</dependency>

添加启动加载配置bootstrap.yml

spring:
  application:
    name: demo
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: 192.168.1.100:8848
        namespace: 22b12b94-df82-46eb-bc47-b6ea4e7437eb
        file-extension: yaml
        group: DEMO_GROUP
        shared-configs:
          - data-id: shared-redis-${spring.profiles.active}.yaml
            refresh: true
            group: DEMO_GROUP
          - data-id: shared-rabbitmq-${spring.profiles.active}.yaml
            refresh: true
            group: DEMO_GROUP

我们使用bootstrap方式来加载启动配置项,注意你的bootstrap.yml加载不成功,那你的依赖需要显示引入spring-cloud-starter-bootstrap

读取配置文件规则(data-id)

该服务的配置文件data-id我们按照默认规则${spring.application.name}-${spring.profiles.active}.${file-extension},按照上面的配置,我们就可以自动加载到我们的demo-dev.yaml配置,如下图所示:
在这里插入图片描述
在这里插入图片描述
访问配置效果如下:
在这里插入图片描述

动态刷新

首先在bootstrap.yml里的refresh-enabled属性设置成true。如下图所示:
在这里插入图片描述
然后通过RefreshScope注解特性,来动态加载配置,如下代码所示:

@RefreshScope
@RestController
@RequestMapping("{version}/test")
public class TestController {
    @Value("${spring.rabbitmq.conn1.password}")
    private String rabbitmqPassword;
    
    @Value("${demo.name}")
    private String demoName;
    
    @RequestMapping(value = "/rabbitmqPassword", method = RequestMethod.GET)
    public String getRabbitmqPassword() {
        return rabbitmqPassword;
    }
    
    @RequestMapping(value = "/demoName", method = RequestMethod.GET)
    public String getDemoName() {
        return demoName;
    }
}

上面的代码只是简单示例一下如何动态刷新单个配置项,实际场景我们会根据Spring的ApplicationListener监听ApplicationReadyEvent,进而对类似数据库,redis等一些配置项进行监听并刷新配置。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值