当前位置:首页 > 服务端 > Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇

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

2022年09月17日 10:12:00服务端6

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记


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)的概念。

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记


配置中心的核心功能

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

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记


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

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记

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

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

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记


微服务接入配置步骤

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

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

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记

Step1 搞依赖包

   <!--加入nocas-client-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- 配置中心nacos-config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-config</artifactId>
        </dependency>
 

Step2 搞配置文件

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

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环境的配置

索要文件的格式为

  ${
     application.name}- ${
     spring.profiles.active}.${
     file-extension}

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

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记


Step3 Nacos Config 增加配置

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记

新建配置

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记


Step4 验证

启动服务,观察日志

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'}]}

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记


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

业务场景

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

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记


Step1 Nacos Config 新增配置项

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

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记


Step2 @Value 解析对应的值

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进行动态刷新

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记

Step4 验证

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

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 , 访问下试试呢

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记

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

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记

看下应用的日志

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]

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

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记
咦,不停机走了老逻辑

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记


源码

https://github.com/yangshangwei/SpringCloudAlibabMaster

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇 _ JavaClub全栈架构师技术笔记

作者:小小工匠
来源链接:https://blog.csdn.net/yangshangwei/article/details/122781477

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/42457.html

标签: Nacos
分享给朋友:

“Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇” 的相关文章

Nacos 启动失败

Nacos 启动失败

由于最近学习 SpringCloudAlibaba ,故将学习过程中出现的问题加以总结。 Nacos 学习时遇到的问题 下载最新的 Nacos 版本在 Windows 直接运行脚本启动,首先报错第一个问题如下: java.lang....

nacos启动教程

nacos启动教程

1、下载nacos压缩包 链接:https://pan.baidu.com/s/1PE6D73rIuOhnfvKVqvDwhA  提取码:oj9y 2、解压  3、修改conf里的配置文件(application.properties...

什么是Nacos

前言 6月份阿里开源的Nacos出了1.0.1版本,从去年7月份第一个release版本到现在一直在默默关注 官方的版本规划为:Nacos从0.8.0开始支持生产可用,1.0版本可大规模生产可用,2.0版本接入k8s、SpringCloud、...

配置中心 Nacos 原理 Nacos如何加载远程配置?

配置中心 Nacos 原理 Nacos如何加载远程配置?

文章目录 前言 Nacos如何加载远程配置? wireshark抓包分析 原理分析...

Nacos介绍与使用

Nacos介绍与使用

主要作用:动态更新,隔离操作,集中管理 一 背景分析 在微服务中,首先需要面对的问题就是如何查找服务(软件即服务),其次,就是如何在不同的服务之间进行通信?如何更好更方便的管理应用中的每一个服务,如何建立各个服务之间联系的纽带,由此注册中心诞生(例如淘宝网卖...

nacos配置中心无法连接或启动报错

nacos配置中心无法连接或启动报错

如果你启动后是下面这样的,那就说明你连接上了,并且红框中最右边的name就是你在配置中心里的DataId 如果你启动后没有上面那样或者是报错,并且你的代码没问题,那最有可能就是版本不兼容,可以参考下面的版本 <parent>...

Nacos修改默认密码

1.添加依赖 <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-s...

Nginx配置Nacos反向代理

Nginx配置Nacos反向代理

修改nginx.conf文件 找到nginx安装位置,在conf文件夹中,编辑nginx.conf文件,将nacos服务信息配置后重启即可。 # nacos proxy upstream nacoscluster {...

Nacos快速入门(一):Nacos初探

Nacos快速入门(一):Nacos初探

1、简介 Nacos官网:https://nacos.io/zh-cn/index.html 1.1、概览 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服...

Nacos的简单使用

Nacos的简单使用

一、Nacos简介 Nacos是阿里系开发的兼容Spring Cloud的服务注册中心组件,是微服务国产化的先驱。Nacos作为与Eureka的对比,不仅具有Eureka固有的集群化、注册中心等功能,还具有配置中心的功能,并且更加简单使用,拆箱即用,也支持二次开发...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。