10-微服务Nacos Config的通用配置

news2024/12/25 13:46:26

一、解决不同环境相同配置问题-自定义Data ID配置

在实际的开发过程中,我们的项目所用到的配置参数有的时候并不需要根据不同的环境进行区分,生产、测试、开发环境所用到的参数值是相同的。那么解决同一服务在多环境中,引用相同的配置的问题?Nacos Config也提供了相应的解决方案。

image.png

那么我们可以通过服务名+拓展名的方式,来实现同一个微服务下不同的环境,共享的配置文件。

1.1 具体配置案例

我们在Nacos Config中添加配置,data_id为configdemo.yaml

image.png

控制器代码更改

@RestController
@RefreshScope //支持Nacos动态刷新功能
public class ConfigController {

@Value(“ c o n f i g . i n f o " ) p r i v a t e S t r i n g c o n f i g I n f o ; ​ / / 通用 @ V a l u e ( " {config.info}") private String configInfo; ​ //通用 @Value(" config.info")privateStringconfigInfo;​//通用@Value("{config.common}”)
private String configCommon;

@GetMapping(“/config/info”)
public String getConfigInfo(){
return configInfo;
}

//通用
@GetMapping(“/config/common”)
public String getCommon(){
return configCommon;
}
}

测试可以直接读取:http://localhost:3377/config/common

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.2 不同微服务之间如何共享配置

当前这种配置方式是最基础的配置方式,但是在实际开发中我们一般会涉及到多个微服务之间共享配置。比如说redis地址,服务注册中心公共组件等等,那么这些组件是多个微服务共享的,所以我们可以使用Nacos Config提供的共享配置方式来配置共享的配置文件。

配置文件名字没有固定要求

image.png

1.2.1 通过shard-configs方式

1.2.1.1 具体实现

在nacos-config中添加 redis.yml,添加配置 redisip: 111.11.11.01

image.png

更改yml配置

spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
shared-configs[0]: #shared-configs是一个列表,可以添加多项
data_id: redis.yml #具体配置
group: DEFAULT_GROUP #默认可以不写
refresh: true #是否开启自动刷新,默认为false,必须搭配@RefreshScope注解

更改测试类

@RestController
@RefreshScope //支持Nacos动态刷新功能
public class ConfigController {

@Value(“ c o n f i g . i n f o " ) p r i v a t e S t r i n g c o n f i g I n f o ; ​ / / 通用 @ V a l u e ( " {config.info}") private String configInfo; ​ //通用 @Value(" config.info")privateStringconfigInfo;​//通用@Value("{config.common}”)
private String configCommon;

@GetMapping(“/config/info”)
public String getConfigInfo(){
return configInfo;
}

//共享
@Value(“${redisip}”)
private String redisIp;

//通用
@GetMapping(“/config/common”)
public String getCommon(){
return configCommon;
}

//通用
@GetMapping(“/config/redisip”)
public String getRedisIp(){
return redisIp;
}
}

测试结果:

image.png

当然也支持多个配置,只需要在shared-configs[n],增加n的数值即可

cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
shared-configs[0]: #shared-configs是一个列表,可以添加多项
data_id: redis.yml #具体配置
group: DEFAULT_GROUP #默认可以不写
refresh: true #是否开启自动刷新,默认为false,必须搭配@RefreshScope注解
shared-configs[1]: #shared-configs是一个列表,可以添加多项
data_id: common.yml #具体配置
group: DEFAULT_GROUP #默认可以不写
refresh: true #是否开启自动刷新,默认为false,必须搭配@RefreshScope注解

注意:多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,优先级越高。

1.2.2 通过extension-configs方式

其实以上的实现还可以通过extension-configs方式来完成,其实作用基本一致,只不过语义上可以更好的区分,如果我们需要在一个微服务上配置多个配置文件,可以使用extension-configs,如果需要多个配置文件共享,可以使用shard-configs配置方式,当然其实两种方式所实现的效果和配置方法基本一致。

所以通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

1.2.2.1 具体实现

更改yml,只需要将shared-configs改为extension-configs即可

spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
extension-configs[0]: #shared-configs是一个列表,可以添加多项
data_id: redis.yml #具体配置
group: DEFAULT_GROUP #默认可以不写
refresh: true #是否开启自动刷新,默认为false,必须搭配@RefreshScope注解
extension-configs[1]: #shared-configs是一个列表,可以添加多项
data_id: common.yml #具体配置
group: DEFAULT_GROUP #默认可以不写
refresh: true #是否开启自动刷新,默认为false,必须搭配@RefreshScope注解

1.3 整体配置优先级

Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。

  • A: 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置

  • B: 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置

  • C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置

当三种方式共同使用时,他们的一个优先级关系是:A < B < C

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1413185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTTP中POST、GET、PUT、DELETE方式的区别

GET请求会向数据库发索取数据的请求&#xff0c;从而来获取信息&#xff0c;该请求就像数据库的select操作一样&#xff0c;只是用来查询一下数据&#xff0c;不会修改、增加数据&#xff0c;不会影响资源的内容&#xff0c;即该请求不会产生副作用。无论进行多少次操作&#x…

uni-app 微信小程序之红包雨活动

文章目录 1. 页面效果2. 页面样式代码 1. 页面效果 GIF录屏有点卡&#xff0c;实际比较丝滑 每0.5s掉落一个红包控制4s后自动移除红包点击红包消除红包&#xff08;或者自行1&#xff0c;或者弹窗需求&#xff09; 2. 页面样式代码 <!-- 红包雨活动 --> <template>…

【TCP】重传与超时机制

前言 在网络通信的世界里&#xff0c;传输控制协议&#xff08;TCP&#xff09;扮演着一个至关重要的角色。它确保了数据的可靠传输&#xff0c;就像邮差确保每一封信都能准确无误地送达收件人手中一样。但是&#xff0c;网络环境充满了不确定性&#xff0c;数据包可能会因为各…

(大众金融)SQL server面试题(3)-客户已用额度总和

今天&#xff0c;面试了一家公司&#xff0c;什么也不说先来三道面试题做做&#xff0c;第三题。 那么&#xff0c;我们就开始做题吧&#xff0c;谁叫我们是打工人呢。 题目是这样的&#xff1a; DEALER_INFO经销商授信协议号码经销商名称经销商证件号注册地址员工人数信息维…

web3d-three.js场景设计器-mesh网格添加多模型-模型描述随动

给场景中的模型加上广告牌描述&#xff0c;可以在模型的MESH里添加Sprite&#xff0c;配上相应的文字&#xff0c; 描述Sprite的位置则是在mesh中的相对位置&#xff0c;比如模型高10&#xff0c;那么我们可以给一个y等于10 来进行适配&#xff0c;这样在移动模型mesh网格时可…

重磅!讯飞星火V3.5马上发布!AI写作、AI编程、AI绘画等功能全面提升!

讯飞星火大模型相信很多友友已经不陌生了&#xff0c;可以说是国内GPT相关领域的龙头标杆&#xff0c;而对于1月30日即将在讯飞星火发布会发出的V3.5新版本来说&#xff0c;讯飞星火V3.5与之前版本相比&#xff0c;性能提升方面相当明显&#xff0c;在提示语义理解、内容生成、…

常见の算法链表问题

时间复杂度 1.链表逆序 package class04;import java.util.ArrayList; import java.util.List;public class Code01_ReverseList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {publi…

零基础学习数学建模——(四)备战美赛

本篇博客将讲解如何备战美赛。 什么是美赛 美赛&#xff0c;全称是美国大学生数学建模竞赛&#xff08;MCM/ICM&#xff09;&#xff0c;由美国数学及其应用联合会主办&#xff0c;是最高的国际性数学建模竞赛&#xff0c;也是世界范围内最具影响力的数学建模竞赛。 赛题内容…

Unity3D学习之UI系统——NGUI

文章目录 1. 前言2 NGUI下载和导入3. NGUI三大组件3.1 Root组件3.1.1 分辨率概念3.1.2 Root的作用3.1.3 root脚本各组件3.1.4 总结 3.2 Panel 组件3.2.1 Panel的作用3.2.2 Panel的控件3.2.3 总结 3.3 EventSystem组件3.3.1 作用3.3.2 组件3.3.3 总结 4 图集制作4.1 图集的作用4…

华为和苹果手机迁移备忘录数据方法

在数字时代&#xff0c;手机已成为我们生活的重要组成部分&#xff0c;而备忘录更是我们日常不可或缺的小助手。但当我们从华为切换到苹果&#xff0c;或从苹果转向华为时&#xff0c;如何确保那些重要的备忘信息不丢失&#xff0c;顺利迁移到新手机中呢&#xff1f; 我曾亲身…

Java实现加权平均分计算程序WeightedAverageCalculator

成绩加权平均分计算程序&#xff0c;带UI界面和输入保存功能。 因为本人对成绩的加权均分有所关注&#xff0c;但学校的教务系统查分时往往又不显示个人的加权均分&#xff0c;加之每次手动敲计算器计算很麻烦就花了点时间写了一个加权均分计算程序自用&#xff0c;顺便开源。…

Vue组件化-插槽Slot和非父子通信

一、认识插槽Slot作用 1.认识插槽Slot 在开发中&#xff0c;我们会经常封装一个个可复用的组件&#xff1a; 前面我们会通过props传递给组件一些数据&#xff0c;让组件来进行展示&#xff1b;但是为了让这个组件具备更强的通用性&#xff0c;我们不能将组件中的内容限制为固…

鸿蒙开发第2篇__装饰器

在ArkTS中&#xff0c; 有装饰器语法。 装饰器用于装饰类、结构、方法、变量&#xff0c;赋予其特殊的含义。 1. Component 表示自定义组件&#xff0c; 用此装饰器的组件是可重用的&#xff0c;可以与其他组件重合 此装饰器装饰的 struct 表示该结构体具有组件化能力&#…

3. MATLAB中Plot绘制放大特定的区域

在MATLAB中&#xff0c;我们经常需要绘制图形并进行一些自定义的操作。在本示例中&#xff0c;我们将演示如何在MATLAB中绘制一个图形&#xff0c;并通过放大某个特定的区域来突出显示。 ## 原始图形 首先&#xff0c;我们绘制了一个包含正弦和余弦函数的图形。 % MATLAB 代…

【STM32】STM32学习笔记-BKP备份寄存器和RTC实时时钟(42)

00. 目录 文章目录 00. 目录01. BKP简介02. BKP特性03. BKP基本结构04. RTC简介05. RTC主要特性06. RTC框图07. RTC基本结构08. 硬件电路09. RTC操作注意事项10. 附录 01. BKP简介 备份寄存器是42个16位的寄存器&#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备…

设计模式_组合模式_Composite

案例引入 学校院系展示 编写程序展示一个学校院系结构: 需求是这样&#xff0c;要在一个页面中展示出学校的院系组成&#xff0c;一个学校有多个学院&#xff0c;一个学院有多个系 【传统方式】 将学院看做是学校的子类&#xff0c;系是学院的子类&#xff0c;小的组织继承大…

【数据结构与算法】队列(Queue)

文章目录 1. 队列介绍2.队列代码实现&#xff08;C语言&#xff09; 往期相关文章推荐&#xff1a; 1.栈之浅谈数组和链表实现栈各自的优缺点 2.线性表之链表 3.线性表之顺序表 1. 队列介绍 队列是一种特殊的线性表&#xff0c;只允许在队尾插入数据&#xff0c;在队头删除数据…

HbuilderX报错“Error: Fail to open IDE“,以及运行之后没有打开微信开发者,或者运行没有反应的解决办法

开始 问题:HbuilderX启动时,打开微信开发者工具报错"Error: Fail to open IDE",以及运行之后没有打开微信开发者,或者运行没有反应的解决办法! 解决办法: 按照步骤一步一步完成分析,除非代码报错,否则都是可以启动的 第一步:检查HbuildX是否登录账号 第二步:检查微信…

Vue使用svg图片-svg-sprite-loader插件

需求&#xff1a;设计给的一个按钮图标是svg的&#xff0c;不是element自带的图标使用插件svg-sprite-loader svg-sprite-loader 什么是svg-sprite-loader&#xff1f; 将多个 svg 打包成 svg-sprite。svg 雪碧图。类似于 CSS 中的 Sprite 技术。图标图形整合在 一起&#xf…

数据仓库现代化和迁移解决方案Datametica

Datametica利用自动化将数据/工作负载/ETI/分析迁移到云&#xff0c;从而为企业提供支持。 Datametica是一家通过建立数据湖来帮助企业实现数据平台现代化的公司&#xff0c;该数据湖安全地保存结构化和非结构化数据。随着企业数据湖从各种来源收集大量数据&#xff0c;需要利…