基于分布式系统结构下Nacos配置中心的应用

前言

在上一篇nacos初始中,已经描述过Nacos的基本知识,在这篇博客里记录的是Nacos配置中心的使用。

Nacos配置中心的作用

  1. 集中化配置管理:Nacos配置中心支持将应用程序的配置信息集中管理,包括常规的属性配置、文本配置、JSON配置等。你可以通过Nacos的控制台或API进行配置的创建、更新、删除和查询。

  2. 动态配置更新:配置中心可以实现配置的动态更新,即在应用程序运行期间,无需重启应用程序就能修改已经配置的属性。当配置更新时,Nacos能够即时通知到应用程序,应用程序可以立即获取新的配置值。

  3. 配置版本管理:Nacos配置中心支持配置的版本管理,可以为每个配置项设定不同的版本,并且可以查看和恢复历史版本的配置。

  4. 统一的命名空间管理:Nacos配置中心支持命名空间的划分,不同的命名空间可以实现配置的隔离和管理。每个命名空间都具有独立的配置存储和权限设置。

  5. 高可用和可扩展:Nacos配置中心支持集群部署,可以确保高可用性和可伸缩性。你可以根据应用程序的需求进行配置中心的水平扩展,以应对高并发的配置读取请求。

基于分布式系统结构下Nacos配置中心的应用_第1张图片

上图描述了如何通过nacos集中管理多个服务的配置

  • 用户通过Nacos Server的控制太集中对多个服务的配置进行管理
  • 各个服务统一从Nacos Server 中获取各自的配置,并监听配置的变化

发布配置

在上一篇博客中,我简单发布了一个配置,并通过Java代码进行了获取。在这篇博客中,我还是先发布一个自定义配置,然后基于微服务进行获取。

基于分布式系统结构下Nacos配置中心的应用_第2张图片

基于分布式系统结构下Nacos配置中心的应用_第3张图片

基于分布式系统结构下Nacos配置中心的应用_第4张图片

配置发布后获取配置,首先需要有搭建好的微服务项目,分别新建service1和service2两个微服务,下面以service1为例,进行获取

step1:修改配置文件名为bootstrap.yaml

基于分布式系统结构下Nacos配置中心的应用_第5张图片

step2:设置配置文件,如下图所示

基于分布式系统结构下Nacos配置中心的应用_第6张图片

step3:定义访问端点,我偷懒,在启动类上加了

基于分布式系统结构下Nacos配置中心的应用_第7张图片

这里的@Value是Spring提供的用于属性赋值的注解,支持直接注入常量值、SpEL表达式、属性文件中的值以及其他Spring容器中的bean,这里的用法是注入属性文件中的值

配置热更新

所谓配置热更新是说可以在不重启服务器的情况下,在运行时对应用程序的配置进行动态的修改,配置热更新可以通过两种方式实现,分别是硬编码和添加注解

1.硬编码方式

@RestController

public class NacosConfigController {

@Autowired

private ConfigurableApplicationContext applicationContext;

    @GetMapping("/nacos-config-test2")

    public String nacosConfingTest2() {

        return applicationContext.getEnvironment().getProperty("config.appName");

    }

}

2.在@Value注入的变量所在类上添加注解@RefreshScope

@RestController

@RefreshScope//只需要在需要动态读取配置的类上添加此注解就可以

public class NacosConfigController {

    @Value("${config.appName}")

    private String appName;

    @GetMapping("/nacos-config-test1")

    public String nacosConfingTest1() {

        return appName;

    }

}

配置共享

配置共享是说,提取各个微服务中的相同配置生成一个公共的配置文件,供所有微服务使用。通过配置共享,可以避免在每个应用程序中都配置相同的信息,提高配置的复用性和一致性。

同一服务下的配置共享

实现步骤:

  • 新建一个以 spring.application.name 命名的配置文件,然后将其所有环境的公共配置放在里面
  • 新建一个名为service-product-test.yaml配置存放测试环境的配置
  • 新建一个名为service-product-dev.yaml配置存放开发环境的配置
  • 在两个环境文件中配置独有信息,例如:

#多配置一段

config:

env: test

#多配置一段

config:

env: dev

  • 添加测试方法
@RestController

@RefreshScope

public class NacosConfigController {

    @Value("${config.env}")

    private String env;

    //3 同一微服务的不同环境下共享配置

    @GetMapping("/nacos-config-test3")

    public String nacosConfingTest3() {
    
        return env;

    }

}

在不同服务下共享配置

不同服务之间实现配置共享的原理类似于文件引入,就是定义一个公共配置,然后在当前配置中引入。

  • 在nacos中定义一个DataID为all-service.yaml的配置,用于所有微服务共享

spring: 
    datasource: 
        driver-class-name: com.mysql.jdbc.Driver 
        url: jdbc:mysql:///shopserverTimezone=UTC
        username: root 
        password: root 
    cloud:
        nacos: 
            discovery: 
                server-addr: 127.0.0.1:8848

  • 修改bootstrap.yaml

spring: 
    application: 
        name: service-product 
    cloud: 
        nacos: 
            config: 
                server-addr: 127.0.0.1:8848 #nacos中心地址 
                file-extension: yaml # 配置文件格式 
                shared-dataids: all-service.yaml # 配置要引入的配置
                refreshable-dataids: all-service.yaml # 配置要实现动态配置刷新的配置         
    profiles: 
        active: dev # 环境标识

然后启动微服务测试就可以啦 

你可能感兴趣的:(java,开发语言)