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

news2024/11/14 15:01:45

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

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.coloradmin.cn/o/1931248.html

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

相关文章

Autosar Dcm配置-0x28服务ComControl-基于ETAS软件

文章目录 前言DcmDcmDsdDcmDspBswMBswMModeRequestPortBswMModeConditionBswMLogicalExpressionBswMActionBswMActionListBswMRule总结前言 0x28服务主要用来控制非诊断报文的通讯,一般在刷写预编程过程中,用来禁止APP的通信报文,可以减少总线负载率,提高刷写成功率。本文…

vue3-tree-org实现带照片的组织架构图

官方文档&#xff1a;vue3-tree-org 显示照片需要注意的地方 使用步骤 下载 npm install vue3-tree-org --save 在main.js中引入 import "vue3-tree-org/lib/vue3-tree-org.css"; import vue3TreeOrg from vue3-tree-org;app.use(vue3TreeOrg) 实现代码 <tem…

【简历】郑州某二本学院:前端秋招简历指导,简历通过率接近于0

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份二本前端同学的校招简历。25届的二本同学求职方向主要是在小公司&#xff0c;但是这个同学他故意把学校放在简历最后&#xff0…

R包:DiagrammeR流程图

介绍 DiagrammeR 依赖于图形描述语言 Graphviz&#xff0c;可以通过 R 包 igraph 和 visNetwork 访问。DiagrammeR 通过将有效的图规范以 DOT 语言的形式传递给 grViz() 函数来输出图。 加载R包 采用DiagrammeRR包&#xff0c;它提供了以下函数&#xff1a; 使用create_grap…

亲子母婴行业媒体邀约宣发资源

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 亲子母婴行业是一个综合性的产业&#xff0c;涉及多个领域&#xff0c;包括儿童食品&#xff0c;儿童玩具&#xff0c;服装&#xff0c;洗护&#xff0c;月子中心&#xff0c;母婴护理&a…

单臂路由组网实验,单臂路由的定义、适用情况、作用

一、定义 单臂路由是指通过在路由器的一个接口上配置许多子接口,从而实现原来相互隔离的不同VLAN之间的互通。 子接口:把路由器上的实际的物理接口划分为多个逻辑上的接口,这些被划分的逻辑接口就是子接口。 二、适用情况 用在没有三层交换机,却要实现不同VLAN之间的互…

怎样恢复删除的视频?简单几步迅速上手!

在短视频时代&#xff0c;视频成为我们生活中不可缺少的一部分。它记录了我们生活中的点点滴滴&#xff0c;承载着许多美好的回忆。如果一不小心删除了重要的视频&#xff0c;那将是一个巨大的缺憾。那我们该怎么恢复删除的视频呢&#xff1f;在电脑删掉的视频还能恢复吗&#…

Java基础笔记(面试题)

一、Tomcat中为什么要使用自定义类加载器 Tomcat中可以放多个Java项目的jar文件&#xff0c;如果每个jar文件中都有一个User的类&#xff0c;那么User类在没有自定义类加载器的情况下是只能加载一次&#xff1b;想要加载多次&#xff0c;只能自定义类加载器 二、JDK、JRE、JVM…

如何实现本地文件存储

文章目录 1. 知识回顾2. 示例代码 我们在上一章回中介绍了"如何实现文件存储"相关的内容&#xff0c;本章回中将继续介绍与此相关的内容.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 知识回顾 我们上一章回中介绍了实现文件存储的三个步骤&#xff0c;不过限…

vue调试工具没有Pinia模块解决办法

修改前&#xff0c;调试工具里面没有Pinia模块 在项目的入口文件mian.js中这样修改 import /assets/main.scss import pinia from /stores/index import { createApp } from vue import App from ./App.vue import router from ./router import elFormRenderer from el-form…

详解 BGE-M3 与 Splade 模型

详解 BGE-M3 与 Splade 模型 本文将探索两种先进的 Embedding 模型——BGE-M3 和 Splade&#xff0c;深入解析它们的设计理念和工作原理。 01. 快速回顾Embedding向量的概念 Embedding 向量或者向量表示&#xff0c;是指在高维向量空间中以数值描述表示对象、概念或实体&am…

使用Python和wxPython创建动态HTML日历生成器

在这个数字化时代,日历仍然是我们日常生活中不可或缺的工具。今天,我们将探讨如何使用Python创建一个动态HTML日历生成器。这个项目不仅实用,还能帮助我们深入理解Python编程、GUI开发和网页生成的相关知识。 项目概述 我们的目标是创建一个应用程序,允许用户选择特定的年份和…

第二证券:电影暑期档持续升温 农机自动驾驶驶入快车道

农机自动驾驶打开驶入快车道 得益于农机补贴、土地流通、高标准农田制造等方针引导&#xff0c;叠加技术突围和用户降本增效的内生需求&#xff0c;我国正处于农业2.0向农业3.0的过渡阶段。其间农机自动驾驶系统是结束农业3.0&#xff08;即自动化&#xff09;的要害并迎来快速…

【中项第三版】系统集成项目管理工程师 | 第 5 章 软件工程② | 5.4 - 5.8

前言 第 5 章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于技术的内容&#xff0c;学习要以教材为准。 目录 5.4 软件实现 5.4.1 软件配置管理 5.4.2 软件编码 5.4.3 软件测试 5.5 部署交付 5.5.1 软件部署 5.5.2 软件交付 5.5.3 持续交付 5.5.4…

我日常是如何使用LLM工具的:你的LLM工具没用起来,可能是因为方法不对。

引言 我对 Prompt 认知经历了 2 个阶段&#xff1a; 第一阶段&#xff1a;去年 3 月-11 月&#xff0c;我认为 Prompt 最终会灭亡。 第二阶段&#xff1a;去年 12 月至今&#xff0c;我有两个理解&#xff1a; 在主流 LLM 工具(比如 ChatGPT&#xff0c;文心一言等大模型厂商…

dom4j 操作 xml 之按照顺序插入标签

最近学了一下 dom4j 操作 xml 文件&#xff0c;特此记录一下。 public class Dom4jNullTagFiller {public static void main(String[] args) throws DocumentException {SAXReader reader new SAXReader();//加载 xml 文件Document document reader.read("C:\\Users\\24…

leetcode刷题总结——字符串匹配

KMP&#xff08;字符串匹配算法&#xff09; 主串或目标串&#xff1a;比较长的&#xff0c;我们就是在它里面寻找子串是否存在&#xff1b; 子串或模式串&#xff1a;比较短的。 前缀&#xff1a;字符串A和B&#xff0c;A BS&#xff0c;S非空&#xff0c;则B为A的前缀。 …

C++从入门到精通(第2版) 中文电子版

前言 C&#xff08;c plus plus&#xff09;是一种计算机高级程序设计语言&#xff0c;由C语言扩展升级而产生&#xff0c;最早于1979年由本贾尼斯特劳斯特卢普在AT&T贝尔工作室研发。C既可以进行C语言的过程化程序设计&#xff0c;又可以进行以抽象数据类型为特点的基于对…

四、GD32 MCU 常见外设介绍

系统架构 1.RCU 时钟介绍 众所周知&#xff0c;时钟是MCU能正常运行的基本条件&#xff0c;就好比心跳或脉搏&#xff0c;为所有的工作单元提供时间 基数。时钟控制单元提供了一系列频率的时钟功能&#xff0c;包括多个内部RC振荡器时钟(IRC)、一个外部 高速晶体振荡器时钟(H…

Python os模块的强大功能与应用详解

概要 在Python中,os模块提供了与操作系统进行交互的功能,允许我们执行各种操作系统任务,如文件和目录操作、环境变量访问、进程管理等。os模块是标准库的一部分,无需额外安装。本文将详细介绍os模块的功能,并提供相应的示例代码,帮助全面掌握这一强大工具。 os 模块概述…