微服务---Spring Cloud Alibaba 03(配置中心)

SpringCloudAlibaba:nacos的多环境配置 佛系工作 开心生活 阅读详情

        我们知道,除了代码之外,软件还有一些配置信息,比如数据库的用户名和密码,还有一些我们不想写死在代码里的东西,例如像线程池大小、队列长度等运行参数,以及日志级别、算法策略等, 还有一些是软件运行环境的参数,如Java 的内存大小,应用启动的参数,包括操作系统的一些 参数配置…… 所有这些东西,我们都叫做软件配置。以前,我们把软件配置写在一个配置文件中,就像 Windows 下的 ini 文件,或是 Linux 下的 conf 文件。然而,在分布式系统下,这样的方式就变得非常不好管理,并容易出错。假如生产环境下,项目现在正在运行,此时修改了配置文件,我们需要让这些配置生效,通常的做法是不是要重启服务。但重启是不是会带来系统服务短时间的暂停,从而影响用户体验呢,还有可能会带来经济上的很大损失(例如双11重启下服务)。基于这样的背景,配置中心诞生了。

一、概述

        配置中心最基础的功能就是存储一个键值对,用户发布一个配置(configKey),然后客户端获取这个配置项(configValue);进阶的功能就是当某个配置项发生变更时,不停机就可以动态刷新服务内部的配置项

主流配置中心:Apollo(携程开源),nacos(阿里开源),Spring Cloud Config(Cloud全家桶成员)

功能:存储项目配置信息的一个服务

作用:集中管理配置信息,动态发布配置信息

二、实操测试

1.在pom里添加依赖

 <!--nacos配置中心的依赖(nacos.io)-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

2.修改配置文件

config: #服务配置(将动态的配置写在配置中心)
        server-addr: localhost:8848
        file-extension: yml  #配置中心指定的配置信息格式的扩展名

3.动态配置日志的输出级别

3.1添加日志输出

在类上添加@Slf4j注解(lombok提供的)

        @GetMapping("provider/echo/{msg}")
        public String doRestEcho1(@PathVariable String msg) throws InterruptedException {
            log.info("doRestEcho1 start {}",System.currentTimeMillis());//{} 标识占位符
            return server+":"+msg;
        }

这里默认日志输出级别是info

3.2在nacos配置中心新建配置

这里我们配置的日志输出级别是error 

 注意:其中Data ID的值要与bootstrap.yml中定义的spring.application.name的值相同(服务名-假如有多个服务一般会创建多个配置实例,不同服务对应不同的配置实例)。

4.测试

访问url进行日志的查看

思考:这里我们可以看到日志没有输出,这是为什么呢?

解答:配置中心配置了error,级别比这个高,所以下面语句不会输出,只会输出error等级或者比error等级高的,但是error就是最高等级了,所以我们想要输出可以动态的去改变配置中心的级别

日志级别:trace<debug<info<warn<error 一般默认是info,调试用debug,上线用error

动态刷新机制:

        对于nacos配置中心而言,有系统内部对配置变化的感知,还有外部系统对配置的感知,假如我们系统在浏览器中能看到日志级别的变化就好了

1.创建动态获取日志级别类

        @Value("${logging.level.com.cy:error}")
        private String logLevel;

        @GetMapping("provider/deGetLogLevel")
        public String deGetLogLevel(){
            //随着级别的变化动态的输出
            log.trace("==log.trace==");//跟踪
            log.debug("==log.debug==");//调试
            log.info("==log.info==");//常规信息
            log.warn("==log.warn==");//警告
            log.error("==log.error==");//错误信息
            return "log is level"+logLevel;
        }

2.在类上添加@RefreshScope注解

        @RefreshScope的作用是在配置中心的相关配置发生变化以后,能够及时看到类中属性值的更新(底层是通过重新创建Controller对象的方式,对属性进行了重新初始化),Controller编写好以后,启动配置中心服务,然后进行访问测试

作用:

  1. 此属性会在属性构建时初始化
  2. 服务启动时会将所有的配置信息(配置文件或者配置中心)读取到Environment对象
  3. @Value用于告诉spring从Environment中读取配置信息
  4. 将读取的配置信息赋值给对象的属性

三、Nacos配置管理模型

Nacos 配置管理模型由三部分构成,如图

 

  • Namespace:命名空间,对不同的环境进⾏隔离,⽐如隔离开发环境和⽣产环境。
  • Group:分组,将若⼲个服务或者若⼲个配置集归为⼀组。
  • Service/DataId:某⼀个服务或配置集,一般对应一个配置文件。

1.新建命名空间

        Nacos中的命名空间一般用于配置隔离,这种命名空间的定义一般会按照环境(开发,生产等环境)进行设计和实现.我们默认创建的配置都存储到了public命名空间

可以克隆操作,然后修改日志输出级别为debug

在yml文件里进行配置

spring:
  cloud:
    nacos:
      config:
        namespace: 6058fd3f-0d4d-44f2-85d6-5fc7d2348046

namespace后面的字符串为命名空间的id,可直接从命名空间列表中进行拷贝.

重启服务发现配置成功,输出的日志级别变为了debug及以上

2.新建分组

2.1新建配置,在配置时把默认的DEFAULT_GROUP分组改成自己的分组名称

 2.2在yml文件中添加组名称

 2.3创建测试类进行测试

    @RefreshScope
    @RestController
    public class ProviderController{
        @Value("${server.tomcat.threads.max:200}")
        private Integer maxThread;
        @GetMapping("/provider/doGetMaxThread")
        public String doGetMaxThread(){
            return "server.threads.max is  "+maxThread;
        }

2.4结果

测试成功

3.共享配置 

        当同一个namespace的多个配置文件中都有相同配置时,可以对这些配置进行提取,然后存储到nacos配置中心的一个或多个指定配置文件,哪个微服务需要,就在服务的配置中设置读取即可。

3.1创建共享配置

3.2在yml文件中进行引入 

            shared-configs[0]:
             data-id: app-public-dev.yml
             refresh: true #默认false,共享配置更新,引用此配置的地方是否要更新

可以引入多个,只需要修改数组里的编号即可,不能相同

        shared-configs[0]:
             data-id: app-public-dev.yml
             refresh: true #默认false,共享配置更新,引用此配置的地方是否要更新
        shared-configs[1]:
             data-id: 自定义共享配置名
             refresh: true #默认false'''

 

3.3创建测试类

@RefreshScope
@RestController
public class ProviderPageController {
    @Value("${page.pageSize:10}")
    private Integer pageSize;
    @GetMapping("provider/doGetPageSize")
    public String doGetPageSize(){
        //return String.format()
        return "page size is "+pageSize;
    }
}

直接引入即可

3.4测试

测试成功 

总结

  1. 配置中心的选型。(市场活跃度、稳定性、性能、易用)
  2. Nacos配置中心基本应用。(新建,修改、删除配置以后,在Nacos客户端应用配置)
  3. 配置管理模型应用。(namespace,group,service/dataId)
  4. Nacos配置变更的动态感知。(底层原理分析)
  5. 配置中心可以动态管理发布配置,无需重启服务,更好保证服务的可用

微服务3——服务的配置(Nacos服务配置中心 ) 小节面试分析 1、什么是配置中心?存储项目配置信息的一个服务,集中管理配置信息,动态发布配置信息。功能就是当某个配置项发生变更时,不停机就可以动态刷新服务内部的配置项 2、市场上有哪些主流的配置中心? 市场上主流配置中心有Apollo(携程开源)--携程开源的阿波罗,nacos(阿里开源),Spring Cloud Config(Spring Cloud 全家桶成员)。 ... 阅读详情

相关推荐

Spring Cloud Alibaba微服务实战:从架构设计到Docker部署完整指南

微服务架构是一种将单一应用拆分为多个独立服务的分布式系统设计模式,其核心原理是通过服务拆分实现技术异构性和弹性扩展。在Java技术栈中,Spring Cloud提供了完整的微服务解决方案,而Spring Cloud Alibaba则在此基础上集成了Nacos、Sentinel等国产化组件,显著提升了配置管理和服务治理能力。分布式缓存技术如Redis在微服务架构中承担着数据共享和性能优化的重要角色,通过内存存储减少数据库压力。在实际工程实践中,结合Docker容器化部署可以实现服务的快速扩展和隔离运行。本文基

weixin_30755393的博客 436

nacos解决shared-configs下的共享配置文件无法实时更新

使用@RefreshScope注解,服务启动后,在nacos配置中心,修改shared-configs下的配置文件mysql.yml,数据源无法实时更新。nacos针对该服务只监听了以上3个配置文件,而我的mysql.yml并没有被监听。进入Config类,发现他有多个构造方法,怀疑问题出现在这里,于是找到问题所在,只需要在yml构造时调用其他的构造,即可。尝试进入shared-configs发现调用了这个方法。

天真吖的博客 3151

Spring Cloud Alibaba微服务架构实战教程—01实战系列教程开篇

SpringCloud-Alibaba微服务架构实战教程—01开篇SpringCloud-Alibaba微服务架构实战教程—01开篇前言技术栈 SpringCloud-Alibaba微服务架构实战教程—01开篇 此项目源自智慧城市方案中的部分需求,是一个结合SpringCloud,SpringCloudAlibaba、Dubbo等技术栈,进行的微服务实战开发案例,长达3万多字的手把手教程,图文并茂,细节到极点,基本囊括了微服务架构中常用技能点,全面覆盖微服务中各种问题的解决方案,是新手入门、初中级开发提升

空空说技术的博客 3096

3.服务配置中心NacosConfig

首先我们来看一下,微服务架构下关于配置文件的一些问题:配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散 在各个微服务中,不好统一配置和管理。配置文件无法区分环境。微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环 境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动 维护,这比较困难。配置文件无法实时更新。我们修改了配置文件之后,必须重新启动微服务才能使配置生效,这对一 个正在运行的项目来说是非常不友好的。

m0_59084280的博客 745

Spring Cloud Alibaba Nacos 用于服务注册和配置中心

本文目录:写在开头1.什么是 Nacos2.Nacos 安装运行3.Nacos 服务注册中心3.1基于Nacos的服务提供者Ⅰ.父pom引入spring-cloud-alibaba 依赖Ⅱ. 当前模块pom引入 nacos-discovery 依赖Ⅲ. applicaiton.yml 文件配置Ⅳ. 来个controller业务类Ⅴ. 启动服务模块,查看服务是否注册到 NacosⅥ. 再来个服务端,与 9001 组成集群3.2 基于Nacos的服务消费者Ⅰ.当前模块pom引入 nacos-discovery

扛麻袋的少年的博客 1650

机械工程师如何用Codex实现CAD自动化:从重复劳动到智能设计

在机械设计领域,CAD二次开发长期面临学习门槛高、维护成本大的难题。随着AI编程助手如Codex的出现,通过自然语言生成可执行代码,工程师无需精通编程即可实现图纸批量处理、BOM表自动生成、参数化建模等任务。这种技术将重复性操作自动化,显著提升设计效率,让工程师聚焦于核心创新。应用场景涵盖批量修改图纸属性、跨软件数据流转、自动打印等。本文分享机械工程师利用Codex落地自动化的实战经验与避坑指南。

weixin_32296621的博客 363

(超详细)关于Nacos的共享配置( shared-configs)和拓展配置(extension-config)

实际工作开发中,对于模块较多的项目,一般都会使用Redis、Mq、公共数据库连接等信息,同时不同模块可能需要连接特定的数据库和配置信息,如果每个模块都使用自己的配置文件本身是没什么问题,只是一旦改动的话,需要每个配置文件都修改,一是麻烦,更主要的是风险大,比如改错或者漏改,损失的都是白花花的银子。如果各应⽤之间共享⼀个配置,请使⽤上⾯的 shared-configs,shared-configs指定的配置,本来应该是不指定group的,也就是应当归⼊DEFAULT_GROUP这个公共分组。

weixin_42329623的博客 1万+

无人机基本组成部件

无人机基本组成部件

qq_37410522的博客 1万+

SpringCloud Alibaba 2021版 nacos 配置中心教程

文章目录nacos 配置中心 是什么nacos config 和 springcloud config 对比常用配置中心对比支持profile粒度的配置快速入门 nacos 配置中心 是什么 nacos config 和 springcloud config 对比 springcloud config大部分场景结合git 使用, 动态变更还需要依赖Spring Cloud Bus 消息总线来通过所有的客户端变化. springcloud config不提供可视化界面 nacos config使用长轮询更新

做一个有思想的技术人 1万+

华为S5720交换机堆叠配置

S5720交换机,做下堆叠,两条线,交叉互联(即A交换机23口连到B交换机24口,A交换机24口连接B交换机23口)。PS:S5720堆叠可基于电口或者光口做,本次测试基于电口。 SWA配置 # 改名 [Huawei]sysname SWA # 最好先shutdown接口 [SWA]interface GigabitEthernet 0/0/23 [SWA-GigabitEthernet0/0/23]shutdown [SWA-GigabitEthernet0/0/23]interface G.

Markdown 6340

eda、gnm、anm究竟是个啥?

eda:主成分分析 gnm:高斯网络模型 anm:各向异性网络模型

药研猿的博客 1244

【Spring Cloud Alibaba 微服务原理与实战系列二】

第一章:微服务介绍及演变过程。

qq_39162508的博客 1346

【数据同化第二期】数据同化中三大理论基础之一(最小方差估计)

【数据同化第二期】深入理解数据同化及经典案例(最小方差估计)

WW、forever的博客 1597

Spring Cloud & Alibaba 基础知识

如果默认的。

菜可夫斯基的博客 2138

从询价到回款:一篇讲透 SAP SD 销售与分销的实战入门指南

摘要: SAP SD(Sales and Distribution)模块是SAP ERP中管理销售与分销的核心组件,贯穿从订单到回款(Order-to-Cash)的全流程。其核心价值在于将销售业务结构化,通过主数据(客户、物料、定价)和交易单据(订单、交货、发票)实现流程可审计、可自动化。SD模块与物流(MM)、生产(PP)、财务(FI)深度集成,涵盖定价策略、信用控制、发运管理、国际贸易等复杂场景。关键设计包括条件技术(Condition Technique)实现灵活定价,单据流(Document Flo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 260

uniapp(微信小程序):实现PDF在线预览+在线预览pdf文件完整示例源码,支持文件来源:服务器pdf外链URL预览、调用后端API接口获取PDF文件流二进制下载及解析打开、上传本地PDF文件预览

uni-app实现PDF预览功能,uniapp微信小程序预览PDF,uniapp开发微信小程序在线预览pdf等文件,uniApp微信小程序实现PDF在线预览,Uniapp app在线预览pdf文件流,微信小程序实现pdf预览(苹果安卓兼容),uniapp-微信小程序 实现pdf外链在线预览,uniapp小程序如何做在线预览pdf功能,uniapp小程序端 实现pdf文件预览,微信小程序(uniapp)PDF预览完整实现方案示例demo源码,uni-app预览PDF,小程序pdf预览插件插件,Uniapp微信

✅ 精选推荐文章 4705

03 顶层设计:微服务生态与 Spring Cloud Alibaba

本文介绍了微服务架构的核心组件及Java实现方案。首先阐述了微服务架构必须解决的8个核心问题,包括服务发现、负载均衡、通信机制等,并对应介绍了注册中心、API网关、配置中心等标准组件。其次分析了SpringCloud作为Java主流微服务解决方案,整合了Eureka等开源产品。最后重点推荐了SpringCloudAlibaba,指出其在兼容SpringCloud基础上,通过Nacos、Sentinel等组件简化架构复杂度,并整合阿里云提供更多特性。文章强调微服务架构需要具体技术支撑,而SpringCloud

周壮的博客 660

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spring Cloud Alibaba 导读

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。

pin621的博客 919

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Spring Cloud Alibaba(全家桶)

Spring Cloud Alibaba 分布式应用服务开发的一站式解决方案

优秀的颜的博客 4020

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Nacos 与 Spring Cloud Alibaba 集成详解:依赖、配置、实战与避坑指南

本文详细介绍了Nacos与Spring Cloud Alibaba的集成方案,重点包括版本兼容性、bootstrap.yml配置机制和动态刷新功能。主要内容: 版本匹配是集成前提,提供了Spring Boot、Spring Cloud和SCA的推荐版本组合 bootstrap.yml在应用启动前加载Nacos配置,解决配置中心初始化问题 详细配置示例展示了服务发现和配置中心的参数设置 通过@RefreshScope实现配置动态刷新 文章为微服务开发者提供了生产级集成指南,涵盖从依赖管理到实际配置的全流程实践

刘一说的IT专栏 2843

Spring Cloud Alibaba-03-Nacos之配置中心、命名空间分组和DataID的关系

配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散 在各个微服务中,不好统一配置和管理。配置文件无法区分环境。微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环 境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动 维护,这比较困难。配置文件无法实时更新。我们修改了配置文件之后,必须重新启动微服务才能使配置生效,这对一 个正在运行的项目来说是非常不友好的。基于上面这些问题,我们就需要配置中心的加入来解决这些问题。

苍云烟 1162

Spring Cloud Alibaba 快速学习之 Sentinel

在微服务系统中,一个对外的业务功能可能会涉及很长的服务调用链路。当其中某个服务出现异常,如果没有服务调用保护机制可能会造成该服务调用链路上大量相关服务直接或间接调用的服务器仍然持续不断发起请求,最终导致相关的所有服务资源耗尽产生异常发生雪崩效应。限流和降级分别作为在流量控制和服务保护方面的两个重要手段,可以有效地应对此类问题。Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。本章将快速讲解Sentinel的简单应用,阅读前需要先了解前置章节。

D_J_Dragon的博客 1802

Spring Cloud Alibaba 组件版本选择

如果不想跨分支升级,如需使用新特性,请升级为对应分支的新版本。下表为按时间顺序发布的 Spring Cloud Alibaba 以及对应的适配 Spring Cloud 和 Spring Boot 版本关系(由于 Spring Cloud 版本命名有调整,所以对应的 Spring Cloud Alibaba 版本号也做了对应变化)如果需要使用 Spring Cloud Greenwich 版本,请在 dependencyManagement 中添加如下内容。2.0.4.RELEASE(停止维护,建议升级)

2509_93882724的博客 936

Spring Cloud Alibaba(03)——Sentinel实现熔断与限流

文章目录Spring Cloud Alibaba(03)——Sentinel实现熔断与限流1、Sentinel概述2、Sentinel下载安装运行3、初始化演示工程4、流控规则4.1、流控规则简介4.2、流控模式4.2.1、直接4.2.2、关联4.2.3、链路4.3、流控效果4.3.1、快速失败4.2.2、WarmUp4.2.3、匀速排队5、降级规则5.1、降级规则简介5.2、降级策略实战5.2.1、慢调用比例5.2.2、异常比例5.2.3、异常数6、热点规则7、系统规则8、@SentinelSource配

万里顾一程的博客 3984
上一篇: 微服务---Spring Cloud Alibaba 02(Nacos)
下一篇: 微服务---Spring Cloud Alibaba 04(Sentinel)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值