使用SpringCloud搭建分布式配置中心

在现代的分布式系统中,配置管理是一个非常重要的组成部分。传统的做法是将配置文件放在每个服务的本地进行配置,这样的做法在规模较小的系统中还能够接受,但是当系统规模逐渐扩大时,配置管理将变得非常困难,容易出错。为了解决这个问题,可以使用分布式配置中心来集中管理系统的配置信息。

Spring Cloud是一个开源的微服务框架,它提供了许多用于构建分布式系统的工具和组件。其中之一就是Spring Cloud Config,它是Spring Cloud提供的配置中心组件。

使用Spring Cloud Config可以将系统的配置信息集中管理,将配置文件放在一个单独的Git仓库中,并使用Spring Cloud Config Server来提供配置文件的访问接口。各个微服务可以通过Spring Cloud Config Client来访问配置中心,获取自己需要的配置信息。

接下来,我们将使用Spring Cloud来搭建一个简单的分布式配置中心。首先,需要准备一个Git仓库,用于存放配置文件。可以在本地搭建一个简单的Git服务器,或者使用GitHub、GitLab等在线仓库服务。

  1. 创建配置仓库

首先,我们创建一个空的Git仓库,作为配置中心的仓库。可以使用git init命令在本地创建一个新的仓库,或者使用git clone命令克隆一个已有的仓库。

  1. 添加配置文件

在配置仓库中,添加一个名为application.properties的配置文件。这个文件将存放所有的配置信息。可以根据不同的环境,创建不同的配置文件,如application-dev.properties、application-prod.properties等。

配置文件的内容可以根据实际情况进行设置,例如:

server.port=8888
spring.application.name=config-server
spring.cloud.config.server.git.uri=file:///${user.home}/config-repo
spring.cloud.config.server.git.clone-on-start=true
spring.cloud.config.server.git.username=user
spring.cloud.config.server.git.password=password

其中,server.port指定了配置中心的端口号,默认为8888。spring.application.name指定了应用的名称,用于在注册中心进行标识。spring.cloud.config.server.git.uri指定了配置仓库的地址,这里使用了本地仓库地址。spring.cloud.config.server.git.clone-on-start指定了是否在启动时自动从远程仓库克隆配置文件。spring.cloud.config.server.git.username和spring.cloud.config.server.git.password指定了访问仓库的用户名和密码,如果仓库是公开的,可以省略这两个配置。

  1. 创建配置中心服务

接下来,我们使用Spring Boot来创建一个配置中心服务。可以使用Spring Initializr来快速创建项目,选择以下依赖:

  • Config Server:用于创建配置中心服务
  • Git:用于从Git仓库读取配置文件
  • Eureka Discovery:用于服务发现和注册

下载生成的项目后,我们可以修改配置文件application.properties,根据实际情况进行配置。例如:

server.port=8888
spring.application.name=config-server
spring.cloud.config.server.git.uri=file:///${user.home}/config-repo
spring.cloud.config.server.git.clone-on-start=true
spring.cloud.config.server.git.username=user
spring.cloud.config.server.git.password=password![](https://p9-heycan-hgt-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/b48e3244146d43098bc2b66dfb554a45~tplv-3jr8j4ixpe-aigc_resize:2000:2000.png?lk3s=43402efa&x-expires=1745026061&x-signature=ITxJ4t0%2FjqEpIYvVu9kxEfuWlb4%3D&format=.png)eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

其中,server.port和spring.application.name的配置与仓库中的配置应该保持一致。spring.cloud.config.server.git.uri指定了配置仓库的地址,这里使用了本地仓库地址。spring.cloud.config.server.git.clone-on-start指定了是否在启动时自动从远程仓库克隆配置文件。spring.cloud.config.server.git.username和spring.cloud.config.server.git.password指定了访问仓库的用户名和密码,如果仓库是公开的,可以省略这两个配置。

  1. 启动配置中心服务

完成配置后,可以运行配置中心服务。在命令行中执行以下命令:

mvn spring-boot:run

配置中心服务将在8888端口启动。

  1. 创建微服务

接下来,我们创建一个简单的微服务,用来演示如何使用配置中心。同样,可以使用Spring Initializr来快速创建项目,选择以下依赖:

  • Eureka Discovery:用于服务发现和注册
  • Config Client:用于访问配置中心

下载生成的项目后,我们可以修改配置文件application.properties,根据实际情况进行配置。例如:

server.port=8080
spring.application.name=hello-service

其中,server.port和spring.application.name的配置根据实际情况进行设置。

  1. 启动微服务

完成配置后,可以运行微服务。在命令行中执行以下命令:

mvn spring-boot:run

微服务将在8080端口启动,并注册到配置中心以及服务注册中心。

  1. 访问配置中心

现在,可以通过访问配置中心来获取配置信息。在浏览器中访问以下地址:

http://localhost:8888/hello-service/default

其中,hello-service是微服务的名称,default是配置文件的名称。将返回配置文件的内容,例如:

{"name": "hello-service","profiles": ["default"],"label": null,"version": "ae0fceda48bd3e1bff7f8d969681965389f2282e","state": null,"propertySources": [{"name": "file:Users/user/config-repo/hello-service.properties","source": {"server.port": "8080","spring.application.name": "hello-service"}}]
}

从返回的结果可以看出,配置中心成功地读取了配置文件中的信息。

  1. 动态刷新配置

由于Spring Cloud Config支持动态刷新配置,所以当配置文件的内容发生变化时,可以通过以下命令来刷新配置:

curl -X POST http://localhost:8080/actuator/refresh

其中,localhost:8080是微服务的地址。刷新配置后,可以再次访问配置中心来获取最新的配置信息。

总结

使用Spring Cloud搭建分布式配置中心非常简单,只需要几个简单的步骤就可以完成。通过集中管理配置信息,可以提高系统的可维护性和灵活性,减少配置管理的工作量。同时,Spring Cloud Config还支持动态刷新配置,可以在配置文件发生变化时自动更新配置,无需重启服务。

不过,需要注意的是,配置中心的安全性要求较高,需要进行适当的安全配置,尤其是在生产环境中。

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

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

相关文章

QT--文件操作和文件读写

文件操作和文件读写 QFile 类用于对文件进行操作,它继承自 QIODevice,可以进行读写操作。主要用于打开、关闭、读取、写入和管理文件。 1. 首先要指定文件路径 QFile fn(“文件路径”);也可以通过文件对话框来选择文件getOpenFileName 函数原型 QStr…

【大数据面试题】37 Doris 是怎么保证性能的?

一步一个脚印,一天一道大数据面试题 博主希望能够得到大家的点赞收藏支持!非常感谢 点赞,收藏是情分,不点是本分。祝你身体健康,事事顺心! Doris 是当下大热的 MPP 数据库,下面来聊聊它如何保证…

AGI 之 【Hugging Face】 的【零样本和少样本学习】之一 [构建标记任务] / [ 基线模型 ] 的简单整理

AGI 之 【Hugging Face】 的【零样本和少样本学习】之一 [构建标记任务] / [ 基线模型 ] 的简单整理 目录 AGI 之 【Hugging Face】 的【零样本和少样本学习】之一 [构建标记任务] / [ 基线模型 ] 的简单整理 一、简单介绍 二、零样本学习 (Zero-shot Learning) 和少样本学习…

【博主推荐】HTML5实现简洁的实用的个人网站、个人主页七个页面源码

文章目录 1.设计来源1.1 个人主页界面1.2 关于我界面1.3 我的技能界面1.4 我的经验界面1.5 我的教育界面1.6 我的项目界面1.7 联系我界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:…

ipsec协议簇(详解)

IPSEC协议簇 IPSEC协议簇 --- 基于网络层的,应用密码学的安全通信协议组 IPV6中,IPSEC是要求强制使用的,但是,IPV4中作为可选项使用 IPSEC可以提供的安全服务 机密性 --- 数据加密 完整性 --- 防篡改可用性 数据源鉴别 -- 身份…

长效代理IP如何选用及代理服务分析

在这个数据为王、信息瞬息万变的时代,长效代理IP成为了众多开发者、数据科学家乃至普通网民手中的一把利器。它不仅能帮助我们解决地域管理,还能在保护隐私的同时,确保数据传输的稳定与安全。但面对市面上琳琅满目的代理服务,如何…

IVI(In-Vehicle Infotainment,智能座舱的信息娱乐系统)

IVI能够实现包括三维导航、实时路况、辅助驾驶等在线娱乐功能。 IVI人机交互形式(三板斧):声音、图像、文字 IVI人机交互媒介I(四件套):中控屏幕(显示、触控)、仪表显示、语言、方…

目标检测 | YOLO v1、YOLO v2、YOLO v3与YOLO v3 SPP理论讲解

☀️教程:霹雳吧啦Wz ☀️链接:https://www.bilibili.com/video/BV1yi4y1g7ro?p1&vd_sourcec7e390079ff3e10b79e23fb333bea49d 一、YOLO v1 针对于two-stage目标检测算法普遍存在的运算速度慢的缺点,YOLO创造性的提出了one-stage目标检测…

2024-07-20 Unity插件 Odin Serializer2 —— 序列化教程

文章目录 1 由根对象决定序列化2 实现 Odin 序列化器2.1 继承已有序列化类2.2 自定义序列化类 3 避免 Unity 无限深度警告4 指定序列化秘钥4.1 External String Reference Resolver4.2 External GUID Reference Resolver4.3 External Index Reference Resolver 4 功能与限制4.1…

为什么我不建议用Excel做进销存系统?

进销存管理系统是一个企业中非常关键的部分,它涉及商品的采购、销售和库存管理等复杂流程。虽然EXCEL作为一个办公软件,它的通用性和灵活性使其能够处理这类数据,但实际上,使用它来构建专业的进销存管理系统存在一些明显的局限性。…

haproxy服务介绍

haproxy 搭建使用开启HAProxy的界面UI配置负载均衡配置web代理 HAProxy(High Availability Proxy)是一个高性能的TCP/HTTP负载均衡器和代理服务器,广泛用于提升Web应用的可用性和性能。[官网说明](https://docs.haproxy.org/2.8/intro.html#3…

NLP: 词袋模型和TFIDF模型

文章目录 词袋模型TF-IDF模型词汇表模型 词袋模型 文本特征提取有两个非常重要的模型: 词集模型:单词构成的集合,集合自然每个元素都只有一个,也即词集中的每个单词都只有一个。 词袋模型:在词集的基础上如果一个单词…

autoxjs的安装与配置

AutoxJs 是一个基于 JavaScript 的自动化工具,用于在 Android 平台上创建自动化脚本。它是在原 Auto.js 项目的基础上继续维护和升级而来的。 AutoxJs 的优势主要包括以下几点: 无需 root 权限:可以在没有 root 权限的设备上运行大部分功能&…

JavaWeb系列二十三: web 应用常用功能(文件上传下载)

文件上传下载 基本介绍文件上传基本原理文件上传应用实例文件上传注意事项和细节 文件下载基本原理文件下载应用实例文件下载注意事项 ⬅️ 上一篇: JavaWeb系列二十二: 线程数据共享和安全(ThreadLocal) 🎉 欢迎来到 JavaWeb系列二十三: web 应用常用功能(文件上传…

创建最佳实践创建 XML 站点地图--SEO

您是否正在努力让您的网站被搜索引擎索引?您想提高您网站的搜索引擎知名度吗?如果是,您可能会错过 XML 站点地图的重要性。XML 站点地图在改善您网站的 SEO 方面发挥着至关重要的作用。‍ XML 站点地图是您网站结构的蓝图,可帮助…

YOLOv5项目梳理

1 项目介绍 参考项目:YOLO项目 1.1训练模型 YOLOv5模型 train.py 训练预训练模型 ... ... def parse_opt(knownFalse):# 命令行参数解析器初始化parser argparse.ArgumentParser()# 初始权重路径,默认为 ROOT / yolov5s.pt,用于指定模…

Navicat 17 for Mac 数据库管理软件

Mac分享吧 文章目录 效果一、准备工作二、开始安装1. 双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕。2. 应用程序/启动台显示Navicat图标,表示安装成功。 二、运行测试运行后提示:“Navicat Premium.pp”已损坏&#x…

在qt的c++程序嵌入一个qml窗口

//拖拽一个QQuickWidget c端和qml通信的桥梁 找到qml的main.qml的路径 ui->quickWidget->setSource(QUrl::fromLocalFile("../../../code/main.qml"));// QML 与 Qt Widgets 通信//窗口就成了一个类实例对象pRoot (QObject*)ui->quickWidget->rootObje…

redis面试基础知识

redis的数据类型 Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样: 五种基本数据类型 Redis 通用命令 通用指令是部分数据类型的,都可以使用的指令,常见的有: KEYS&#xff…

思维(交互题),CF 1990E2 - Catch the Mole(Hard Version)

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 E2 - Catch the Mole(Hard Version) 二、解题报告 1、思路分析 考虑每次误判都会让鼹鼠上升一层,相应的,最外层的一层结点都没用了 由于数据范围为5000,我们随便找个叶子…