Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇

作者头像
小小工匠
发布于 2022-02-05 07:58:07
发布于 2022-02-05 07:58:07
78300
代码可运行
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构
运行总次数:0
代码可运行

文章目录


Nacos配置中心基础概念

https://nacos.io/zh-cn/docs/concepts.html

在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。

配置服务 (Configuration Service)

在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。

配置管理 (Configuration Management)

数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。

配置项

一个具体的可配置的参数与其值域,通常以 param-key=param-value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。

配置集

一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

配置集 ID

Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

配置分组

Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

配置快照

Nacos 的客户端 SDK 会在本地生成配置的快照。当客户端无法连接到 Nacos Server 时,可以使用配置快照显示系统的整体容灾能力。配置快照类似于 Git 中的本地 commit,也类似于缓存,会在适当的时机更新,但是并没有缓存过期(expiration)的概念。

配置中心的核心功能

  • 不同环境不同配置
  • 配置属性动态刷新

实现配置中心要解决的问题

我们看看上图,由几个问题要解决

  • 微服务怎么知道配置中心的地址 ?
  • 微服务到底需要连接哪个环境 ?
  • 怎么找到nacos config上的对应的配置文件 ?

微服务接入配置步骤

我们建立一个工程 artisan-cloud-nacos-config ,假设这个工程 要从配置中心上拉取配置 。

不要被这个工程的名字给迷惑了,其实就是我们普通的微服务,比如ORDER 、PRODUCT服务要接入配置中,就需要这么搞

Step1 搞依赖包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-alibaba-nacos-discoveryartifactId>
        dependency>

        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-alibaba-nacos-configartifactId>
        dependency>

Step2 搞配置文件

编写配置文件,需要写一个bootstrap.yml配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  cloud:
    nacos:
      config:  # 这里是 config , 服务注册的这个地方是 discovery
        server-addr: 1.117.97.88:8848
        file-extension: yml
  application:  # 表示当前微服务需要向配置中心索要artisan-config-center的配置
    name: artisan-config-center
  profiles: # 表示我需要向配置中心索要artisan-config-center的开发环境的配置
    active: dev
  • server-addr: 1.117.97.88:8848 表示我微服务怎么去找我的配置中心
  • spring.application.name=artisan-config-center 表示当前微服务需要向配置中心索要artisan-config-center的配置
  • spring.profiles.active=dev表示我需要向配置中心索要artisan-config-center的dev环境的配置

索要文件的格式为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  ${application.name}- ${spring.profiles.active}.${file-extension}

同样的,我们这个服务也要注册到Nacos

Step3 Nacos Config 增加配置

新建配置

Step4 验证

启动服务,观察日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2022-02-04 12:37:50.945  INFO 14772 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'artisan-config-center-dev.yml', group: 'DEFAULT_GROUP', data: server:
    port: 5678
2022-02-04 12:37:50.948  INFO 14772 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='artisan-config-center-dev.yml'}, NacosPropertySource {name='artisan-config-center.yml'}, NacosPropertySource {name='artisan-config-center'}]}

Another 栗子 (不停机生效新值)

业务场景

我们有个新业务上线, 业务需要,保留原来老逻辑的代码,所有我们打算搞个一个开关变isNewPath 来控制,为了以防万一,如果新功能上了生产后,发现有bug,怎么做到修改isNewBusi的值不需要重启 ?

Step1 Nacos Config 新增配置项

在上个工程的基础上,我们来增加这个功能

Step2 @Value 解析对应的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RefreshScope
@Slf4j
public class OrderInfoController {


    @Value("${isNewPath}")
    private Boolean isNewPath;


    @RequestMapping("/selectOrderInfoById/{orderNo}")
    public Object selectOrderInfoById(@PathVariable("orderNo") String orderNo) {

        log.info("是否业务走新逻辑:{}", isNewPath);
        if (isNewPath) {
            return "查询订单执行新逻辑->execute new logic : " + orderNo;
        }
        return "查询订单执行老逻辑->execute old logic : " + orderNo;

    }

}

Step3 Controller上添加@RefreshScope进行动态刷新

Step4 验证

启动服务,观察拉取的配置中心的配置项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2022-02-04 13:30:27.453  INFO 21040 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'artisan-config-center-dev.yml', group: 'DEFAULT_GROUP', data: server:
    port: 5678
# 是否走新业务逻辑的开关
isNewPath: true     

我们看到是true , 访问下试试呢

Nacos Config上修改值为false ,观察日志,重新测试

看下应用的日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2022-02-04 13:32:29.234  INFO 21040 --- [.117.97.88_8848] o.s.cloud.commons.util.InetUtils         : Cannot determine local hostname
2022-02-04 13:32:29.273  INFO 21040 --- [.117.97.88_8848] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$de53a9bf] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2022-02-04 13:32:30.791  INFO 21040 --- [.117.97.88_8848] o.s.cloud.commons.util.InetUtils         : Cannot determine local hostname
2022-02-04 13:32:30.884  WARN 21040 --- [.117.97.88_8848] c.a.c.n.c.NacosPropertySourceBuilder     : Ignore the empty nacos configuration and get it based on dataId[artisan-config-center] & group[DEFAULT_GROUP]
2022-02-04 13:32:30.952  WARN 21040 --- [.117.97.88_8848] c.a.c.n.c.NacosPropertySourceBuilder     : Ignore the empty nacos configuration and get it based on dataId[artisan-config-center.yml] & group[DEFAULT_GROUP]
2022-02-04 13:32:31.012  INFO 21040 --- [.117.97.88_8848] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'artisan-config-center-dev.yml', group: 'DEFAULT_GROUP', data: server:
    port: 5678
# 是否走新业务逻辑的开关
isNewPath: false     
2022-02-04 13:32:31.013  INFO 21040 --- [.117.97.88_8848] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='artisan-config-center-dev.yml'}, NacosPropertySource {name='artisan-config-center.yml'}, NacosPropertySource {name='artisan-config-center'}]}
2022-02-04 13:32:31.014  INFO 21040 --- [.117.97.88_8848] o.s.boot.SpringApplication               : The following profiles are active: dev
2022-02-04 13:32:31.023  INFO 21040 --- [.117.97.88_8848] o.s.boot.SpringApplication               : Started application in 3.29 seconds (JVM running for 128.768)
2022-02-04 13:32:31.040  INFO 21040 --- [.117.97.88_8848] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [isNewPath]

已经获取到了最新值 , isNewPath: false ,并且 Refresh keys changed: [isNewPath]

我们不重启应用,直接访问

咦,不停机走了老逻辑

源码

https://github.com/yangshangwei/SpringCloudAlibabMaster

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/02/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置
举个例子,同一个微服务,通常我们的servlet-context 都是相同的,不区分生产环境、测试环境, 那类似这样公共的配置,我们可以每个自己单独配置一份,有没有更好的方式呢?
小小工匠
2022/02/05
8530
Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置
Spring Cloud Alibaba - 19 Nacos Config配置中心加载不同微服务的通用配置的两种方式
Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置 这里说了相同的服务,不同环境下的配置。
小小工匠
2022/02/05
1.7K0
Spring Cloud Alibaba - 19 Nacos Config配置中心加载不同微服务的通用配置的两种方式
Spring Cloud Alibaba 系列之 Nacos 配置中心
  Nacos 除了通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现以外,还可以通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。Nacos 作为配置中心时是可以动态变更的,不像 Spring Cloud Config 需要配合 Spring Cloud Bus 实现半自动。☞ 官方文档
Demo_Null
2020/11/24
1.7K0
Spring Cloud Alibaba 系列之 Nacos 配置中心
19.SpringCloud实战项目-整合Nacos配置中心
这种方式的缺点是什么呢?如果要修改配置参数,则需要重新启动服务。如果服务很多,则需要重启所有服务,非常不方便。
悟空聊架构
2022/05/13
5570
19.SpringCloud实战项目-整合Nacos配置中心
使用Nacos作为配置中心(四)
通过之前文章的学习我们已经学会了使用Nacos完成服务的注册与发现。同时也介绍了Spring Cloud中不同风格的服务消费方式。接下来,我们再来学习下Nacos的另一个重要功能:配置管理
用户1212940
2022/04/13
1.4K0
使用Nacos作为配置中心(四)
一文读懂Nacos注册中心
—般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如Spring cloud和Dubbo服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。
Blue_007
2023/11/02
1.4K0
一文读懂Nacos注册中心
Nacos统一配置中心
  nacos管理配置文件方式是在自己所在的服务器上形成一个版本库,因此不需要再创建远程版本库。   Nacos作为统一配置中心管理配置文件时,同样也是存在版本控制。
别团等shy哥发育
2023/02/25
8330
Nacos统一配置中心
Java学习笔记-微服务(7)-注册配置中心Nacos
Nacos 的含义是 Dynamic Naming and Configuration Service。
咸鱼程序员
2025/03/08
2690
Java学习笔记-微服务(7)-注册配置中心Nacos
Spring Cloud Alibaba之服务发现组件 - Nacos配置的多文件加载与共享配置(七)
对于Nacos作为配置中心的使用,通过之前的几篇文章,我们已经介绍了如何在Nacos中创建配置内容、Nacos配置内容与Spring应用配置之间的对应关系以及实战中多环境下的配置管理方案。
用户1212940
2022/04/13
7400
Spring Cloud Alibaba之服务发现组件 - Nacos配置的多文件加载与共享配置(七)
Nacos Config--服务配置
使用nacos作为配置中心,其实就是将nacos当做一个服务端,将各个微服务看成是客户端,我们 将各个微服务的配置文件统一存放在nacos上,然后各个微服务从nacos上拉取配置即可。 接下来我们以商品微服务为例,学习nacos config的使用。
用户10196776
2022/11/28
5550
Nacos Config--服务配置
Spring Cloud Alibaba - 03 注册中心Nacos 应用篇(上)
下载地址 :https://github.com/alibaba/Nacos/releases
小小工匠
2022/02/03
3470
Spring Cloud Alibaba - 03 注册中心Nacos 应用篇(上)
Nacos作为服务配置中心实战
  Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取, 拉取配置之后,才能保证项目的正常启动。
别团等shy哥发育
2023/02/25
8510
Nacos作为服务配置中心实战
SpringCloud之Nacos配置中心解读
当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。
一个风轻云淡
2023/10/23
6870
SpringCloud之Nacos配置中心解读
Nacos Config集成SpringCloud使用说明
Nacos config提供了配置中心的解决方案,且功能非常的强大适用,提供单机与集群模式
用户2603479
2019/09/12
2.6K0
Nacos Config集成SpringCloud使用说明
推荐:Spring Cloud 整合 Nacos 实现服务配置中心
在之前的文章 《Nacos 本地单机版部署步骤和使用》 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能
二哥聊运营工具
2021/12/16
5850
推荐:Spring Cloud 整合 Nacos 实现服务配置中心
SpringCloud系列(七)| 集成Nacos配置中心
在说配置中心之前,我们先说说配置文件,关于这个词,我想大家并不陌生。 不管是前端,后端或是其他的各类技术栈,应该都离不来配置文件。我们在早期的代码开发时代,就经常和配置文件打交道, 什么web.xml, applicationContext.xml,mybatis-config.xml、hibernate.cfg.xml, 等等等等(熟悉这些文件名称的应该都是老司机了)。
一缕82年的清风
2023/12/18
1.2K0
SpringCloud系列(七)| 集成Nacos配置中心
6000 字|20 图|Nacos 手摸手教程
上次我们讲解了 OpenFeign 的架构原理,这次我们要来进入 Nacos 帝国了,Nacos 作为服务注册中心、配置中心,已经非常成熟了,业界的标杆,在讲解 Nacos 的架构原理之前,我先给大家来一篇开胃菜:讲解 Nacos 如何使用。
悟空聊架构
2022/05/13
4220
6000 字|20 图|Nacos 手摸手教程
Spring Cloud 整合 nacos 实现动态配置中心
上一篇 Spring Cloud 微服务实战——nacos 服务注册中心搭建(附源码) 讲解了Spring Cloud 整合 nacos 实现服务注册与发现,nacos除了有服务注册与发现的功能,还有提供动态配置服务的功能。本文主要讲解Spring Cloud 整合nacos实现动态配置服务。主要参考官方部署手册点我。
用户10384376
2023/02/26
1.3K0
Spring Cloud 整合 nacos 实现动态配置中心
Nacos Config--服务配置
Apollo是由携程开源的分布式配置中心。特点有很多,比如:配置更新之后可以实时生效,支持灰度发 布功能,并且能对所有的配置进行版本管理、操作审计等功能,提供开放平台API。并且资料也写的很 详细。
IT小马哥
2021/09/03
5040
Nacos Config--服务配置
nacos做服务配置中心
在TestController上加个@RefreshScope注解,然后我们去nacos客户端手动修改config.info的信息,然后重新调用这个/test接口,会发现响应的是修改后的内容。
Java旅途
2020/10/22
1.9K0
推荐阅读
相关推荐
Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验