【微服务】Spring Cloud Config解决的问题和案例

文章目录

      • 强烈推荐
      • 引言
      • 解决问题
        • 1. 配置管理的集中化
        • 2. 配置的版本控制
        • 3. 环境特定配置
        • 4. 配置的动态刷新
        • 5. 安全管理敏感数据
        • 6. 配置的一致性
      • 组件
        • 1. **配置服务器(Config Server)**
        • 2. **配置客户端(Config Client)**
      • 配置示例
        • 配置服务器(application.yml)
        • 配置客户端(bootstrap.yml)
      • 工作原理
      • 示例场景
        • 场景 1:多个环境配置管理
          • 示例
            • Git 仓库中的配置文件结构:
            • application.yml (通用配置):
            • application-dev.yml (开发环境配置):
            • application-test.yml (测试环境配置):
            • application-prod.yml (生产环境配置):
            • 配置客户端(bootstrap.yml):
        • 场景 2:配置变更的自动传播
          • 示例
            • 更新前的 application-prod.yml:
            • 更新后的 application-prod.yml:
            • 触发配置刷新
        • 场景 3:安全管理
          • 示例
            • Git 仓库中的配置文件:
            • application.yml(使用加密值):
            • 配置服务器的 application.yml:
            • 配置客户端(bootstrap.yml):
            • 应用程序代码示例:
      • 常用的参数说明
        • 配置服务器(Config Server)
          • Git 仓库配置
          • 本地文件系统配置
        • 配置客户端(Config Client)
        • 示例配置文件
          • 配置服务器(application.yml)
          • 配置客户端(bootstrap.yml)
      • 总结
      • 强烈推荐
      • 专栏集锦
      • 写在最后

579a429daf314744b995f37351b46548

强烈推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

b004071ozy_05_amzn


引言

Spring Cloud Config 是 Spring Cloud 套件中的一个工具,提供了在分布式系统中对外部化配置的服务器端和客户端支持。


解决问题

Spring Cloud Config 主要解决以下几个问题:

1. 配置管理的集中化

在一个分布式系统中,管理多个微服务的配置是一个挑战。Spring Cloud Config 提供了一个集中化的配置管理解决方案,将所有微服务的配置存储在一个中央仓库(例如 Git 仓库)中,从而简化了配置的管理和维护。

2. 配置的版本控制

通过将配置文件存储在 Git 等版本控制系统中,Spring Cloud Config 支持配置的版本控制。每次更改配置都会被记录,允许回滚到以前的版本。这对于追踪配置变更和恢复到稳定状态非常有用。

3. 环境特定配置

不同环境(如开发、测试、生产)可能需要不同的配置。Spring Cloud Config 支持根据环境动态加载配置文件,使得在不同环境中部署和运行应用程序更加方便和可靠。

4. 配置的动态刷新

Spring Cloud Config 支持在运行时动态刷新配置,而无需重新启动应用程序。这意味着当配置发生变化时,应用程序可以立即使用新的配置,从而减少停机时间和提高系统的灵活性。

5. 安全管理敏感数据

在配置文件中存储敏感数据(如密码、API 密钥)是一个安全风险。Spring Cloud Config 提供了加密和解密功能,确保敏感数据在传输和存储过程中是安全的。

6. 配置的一致性

在分布式系统中,确保所有服务使用相同的配置是一个挑战。Spring Cloud Config 提供了一个中央服务器来提供配置,确保所有服务从同一来源获取配置,从而保持配置的一致性。


组件

1. 配置服务器(Config Server)

配置服务器是一个集中管理所有环境中应用程序外部属性的地方。它从各种来源(最常见的是 Git 仓库)提供配置。

配置

  • spring.cloud.config.server.git.uri 指定 Git 仓库的位置。

  • spring.cloud.config.server.git.clone-on-start 在服务器启动时克隆仓库。

2. 配置客户端(Config Client)

需要从配置服务器获取配置的应用程序充当配置客户端。它们通常是从配置服务器提取配置属性的 Spring Boot 应用程序。

配置

  • spring.cloud.config.uri 指定配置服务器的位置。
  • spring.application.namespring.profiles.active 帮助客户端获取适当的配置文件。

配置示例

配置服务器(application.yml)
server:port: 8888spring:cloud:config:server:git:uri: https://github.com/your-repo/config-reposearchPaths: application, profile-specificclone-on-start: true
配置客户端(bootstrap.yml)
spring:cloud:config:uri: http://localhost:8888application:name: my-appprofiles:active: development

工作原理

  1. 启动
    • 配置服务器克隆指定的 Git 仓库并提供配置文件。
    • 配置客户端在启动时联系配置服务器以检索其配置属性。
  2. 配置检索
    • 配置客户端使用唯一的应用程序名称和配置文件(环境)进行标识。
    • 配置服务器响应适用于该应用程序和配置文件的配置文件。
  3. 动态刷新
    • 使用 Spring Cloud Bus,客户端可以在不重启的情况下刷新其配置。通常通过向总线发送刷新事件来实现,这些事件会传播到所有客户端。

示例场景

场景 1:多个环境配置管理

在一个企业中,开发、测试、和生产环境需要不同的配置。通过 Spring Cloud Config,可以将这些配置存储在 Git 仓库中,并根据当前运行的环境动态加载相应的配置文件。

示例

假设有一个名为 my-app 的应用程序需要在开发、测试和生产环境中运行,每个环境都有不同的数据库连接配置。

Git 仓库中的配置文件结构:
config-repo/my-app/application.ymlapplication-dev.ymlapplication-test.ymlapplication-prod.yml
application.yml (通用配置):
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driver
application-dev.yml (开发环境配置):
spring:datasource:url: jdbc:mysql://localhost:3306/devdbusername: devuserpassword: devpass
application-test.yml (测试环境配置):
spring:datasource:url: jdbc:mysql://localhost:3306/testdbusername: testuserpassword: testpass
application-prod.yml (生产环境配置):
spring:datasource:url: jdbc:mysql://prod-db-server:3306/proddbusername: produserpassword: prodpass
配置客户端(bootstrap.yml):
spring:application:name: my-appprofiles:active: dev  # 可根据环境修改为 dev, test, 或 prod
spring:cloud:config:uri: http://localhost:8888

my-app 在不同环境中启动时,它会根据 spring.profiles.active 动态加载相应的配置文件。

场景 2:配置变更的自动传播

假设在生产环境中需要更新某个服务的数据库连接字符串。使用 Spring Cloud Config,可以在 Git 仓库中更新配置文件,然后通知所有相关服务刷新配置,这样就可以在不中断服务的情况下应用新的配置。

示例

假设在生产环境中需要更新数据库连接字符串。

更新前的 application-prod.yml:
spring:datasource:url: jdbc:mysql://prod-db-server:3306/proddbusername: produserpassword: prodpass
更新后的 application-prod.yml:
yaml复制代码spring:datasource:url: jdbc:mysql://new-prod-db-server:3306/proddbusername: produserpassword: newprodpass
触发配置刷新
  1. 更新 Git 仓库中的配置文件。

  2. 发送 POST 请求到 Spring Cloud Bus 以刷新配置:

    shell
    复制代码
    curl -X POST http://localhost:8080/actuator/bus-refresh
    

应用程序将自动获取新的配置,无需重启。

场景 3:安全管理

一个服务需要访问第三方 API,并且需要使用 API 密钥。将 API 密钥加密后存储在配置文件中,并使用 Spring Cloud Config 提供的解密功能来读取密钥,从而提高安全性。

示例

假设有一个名为 my-secure-app 的应用程序需要访问第三方 API,并且需要使用 API 密钥。

Git 仓库中的配置文件:
config-repo/my-secure-app/application.yml
application.yml(使用加密值):
api:key: {cipher}AQBvcVzJzpI...
配置服务器的 application.yml:
encrypt:key: my-symmetric-key  # 对称密钥
配置客户端(bootstrap.yml):
yaml复制代码spring:application:name: my-secure-app
spring:cloud:config:uri: http://localhost:8888
应用程序代码示例:
@RestController
public class ApiController {@Value("${api.key}")private String apiKey;@GetMapping("/api-key")public String getApiKey() {return apiKey;}
}

在这个示例中,API 密钥在 Git 仓库中是加密的,并且通过配置服务器和客户端的集成,在运行时自动解密并注入到应用程序中。


常用的参数说明

在使用 Spring Cloud Config 时,有一些常用的参数需要了解和配置。这些参数帮助你控制 Config Server 和 Config Client 的行为。以下是一些常用的参数及其说明:

配置服务器(Config Server)
Git 仓库配置
  • spring.cloud.config.server.git.uri:

    • 说明: 指定 Git 仓库的 URI。
    • 示例: spring.cloud.config.server.git.uri=https://github.com/your-repo/config-repo
  • spring.cloud.config.server.git.clone-on-start:

    • 说明: 在服务器启动时克隆 Git 仓库。
    • 示例: spring.cloud.config.server.git.clone-on-start=true
  • spring.cloud.config.server.git.searchPaths:

    • 说明: 配置文件的搜索路径,可以指定多个路径。
    • 示例: spring.cloud.config.server.git.searchPaths=application,profile-specific
  • spring.cloud.config.server.git.usernamespring.cloud.config.server.git.password:

    • 说明: 用于访问受保护的 Git 仓库的凭证。

    • 示例:

      spring:cloud:config:server:git:username: your-usernamepassword: your-password
      
  • spring.cloud.config.server.git.default-label:

    • 说明: 指定要使用的默认 Git 分支或标签。

    • 示例: spring.cloud.config.server.git.default-label=main

本地文件系统配置
  • spring.cloud.config.server.native.searchLocations:

    • 说明: 指定本地文件系统中配置文件的位置。

    • 示例: spring.cloud.config.server.native.searchLocations=file:///path/to/config

配置客户端(Config Client)
  • spring.cloud.config.uri:

    • 说明: 指定 Config Server 的 URI。
    • 示例: spring.cloud.config.uri=http://localhost:8888
  • spring.application.name:

    • 说明: 配置客户端的应用程序名称,用于在 Config Server 中查找对应的配置文件。
    • 示例: spring.application.name=my-app
  • spring.profiles.active:

    • 说明: 指定当前激活的配置文件,用于加载对应环境的配置。
    • 示例: spring.profiles.active=development
  • spring.cloud.config.label:

    • 说明: 指定要使用的 Git 分支或标签。
    • 示例: spring.cloud.config.label=main
  • spring.cloud.config.usernamespring.cloud.config.password:

    • 说明: 用于访问受保护的 Config Server 的凭证。

    • 示例

      :

      spring:cloud:config:username: your-usernamepassword: your-password
      
  • spring.cloud.config.retry.enabled:

    • 说明: 启用或禁用客户端重试配置服务器连接的功能。
    • 示例: spring.cloud.config.retry.enabled=true
  • spring.cloud.config.fail-fast:

    • 说明: 配置客户端在启动时如果无法连接到配置服务器是否立即失败。
    • 示例: spring.cloud.config.fail-fast=true
  • spring.cloud.config.overrideNone:

    • 说明: 指定如果本地配置文件存在,不覆盖它们。
    • 示例: spring.cloud.config.overrideNone=true
  • spring.cloud.config.overrideSystemProperties:

    • 说明: 指定是否覆盖系统属性。

    • 示例: spring.cloud.config.overrideSystemProperties=false

示例配置文件
配置服务器(application.yml)
server:port: 8888spring:cloud:config:server:git:uri: https://github.com/your-repo/config-reposearchPaths: application,profile-specificclone-on-start: truedefault-label: mainusername: your-usernamepassword: your-password
配置客户端(bootstrap.yml)
spring:application:name: my-appprofiles:active: developmentcloud:config:uri: http://localhost:8888label: mainusername: your-usernamepassword: your-passwordretry:enabled: truefail-fast: true

总结

Spring Cloud Config 在分布式系统的配置管理中发挥着至关重要的作用。

通过集中化配置管理、环境特定配置、版本控制、动态更新和安全管理等功能,Spring Cloud Config 提高了配置管理的效率和安全性,简化了微服务架构下的配置管理流程。

理解和正确配置这些参数,可以有效地管理和维护系统的配置


强烈推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

b004071ozy_05_amzn


专栏集锦

大佬们可以收藏以备不时之需:

Spring Boot 专栏:http://t.csdnimg.cn/peKde

ChatGPT 专栏:http://t.csdnimg.cn/cU0na

Java 专栏:http://t.csdnimg.cn/YUz5e

Go 专栏:http://t.csdnimg.cn/Jfryo

Netty 专栏:http://t.csdnimg.cn/0Mp1H

Redis 专栏:http://t.csdnimg.cn/JuTue

Mysql 专栏:http://t.csdnimg.cn/p1zU9

架构之路 专栏:http://t.csdnimg.cn/bXAPS


写在最后

感谢您的支持和鼓励! 😊🙏

如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!

如果有项目或者毕设合作,请联系下方微信,备注项目合作

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

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

相关文章

十一、(正点原子)Linux异步通知

一、简介 我们首先来回顾一下“中断”,中断是处理器提供的一种异步机制,我们配置好中断以后就可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数,在中断服务函数中做具体的处理。 Linux …

JVM常见知识点总结

最近在看关于JVM的一些知识点,之前也有了解过,可是时间一长就总会忘,索性按照自己的记忆方式去回顾一下知识点。 首先,jvm是Java程序运行的环境,全称为Java Virtual Machine 当我们写好的Java文件经过javac编译后就变成…

Java SE—基本数据类型(详细讲解)

📝个人主页🌹:誓则盟约 ⏩收录专栏⏪:Java SE 🤡往期回顾🤡:Python 神器:wxauto 库——解锁微信自动化的无限可能 🌹🌹期待您的关注 🌹&#x1f3…

售前工程师的AI大模型转型之路

随着人工智能技术的飞速发展,大模型(Large Language Models, LLMs)正逐渐成为IT行业的热点。对于售前工程师来说,转行大模型领域不仅意味着新的机遇,也面临着诸多挑战。本文将探讨售前工程师转行大模型领域的机遇与挑战…

嵌入式人工智能(6-树莓派4B按键输入控制LED)

1、按键 按键的原理都是一样,通过按键开关的按下导通,抬起断开的情况,GPIO引脚来检测其是否有电流流入。GPIO有input()方法,对于GPIO引脚检测电流,不能让其引脚悬空,否则引脚会受周边环境电磁干扰产生微弱…

SpringBoot之健康监控(Actuator)

1,基本介绍 Spring Actuator 是 Spring Boot 提供的一个扩展模块,用于监控和管理应用程序的生产环境。它通过 HTTP 端点暴露了大量的监控和管理功能,使得开发者可以在运行时查看应用程序的运行状况、配置信息、性能指标等。 主要功能&#…

探索未来视界:LC201小尺寸红外热成像机芯引领行业新变革

在当今科技飞速发展的时代,红外热成像技术正以前所未有的方式革新着诸多行业,而灵卡技术推出的LC201小尺寸红外热成像机芯,正是这一变革的先锋。专为体积和功耗敏感领域设计,LC201以超紧凑的22x22mm尺寸、轻量化设计,及…

什么是边缘计算技术和边缘计算平台?

随着物联网、5G技术和人工智能的不断发展,数据的规模和种类也在快速增加。在这种背景下,传统的云计算模式面临着一些问题,例如延迟高、网络拥塞等,这些问题限制了数据的处理速度和效率,降低了用户的使用体验。为了解决…

非对称加解密和签名

非对称加解密特点 一对密钥,公钥和私钥。私钥自己持有,公钥公开给通信的对方。 如果公钥用作加密,那么私钥用作解密。 如果私钥用做加密,那么公钥用作解密。 如果数据量少可用非对称加密算法直接加密。 如果数据量大,…

【Python爬虫教程】第7篇-requests模块的cookies保存和使用

文章目录 为什么要保存cookiesrequests.utils工具类保存cookies到本地文件从本地文件解析cookies使用使用实践 为什么要保存cookies 保存cookies是避免每次都登录获取权限,一遍权限是有过期时间的,不需要每次重复登录,可以将cookies保存起来…

MySQL事务隔离级别+共享锁,排他锁,乐观锁,悲观锁

在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)。 MySQL事务隔离级别 一个事务的执行,本质上就是一条工作线程在执行,当出现多个事务同时执行时,这种情况则被称之为并发事务&am…

AI算法16-贝叶斯线性回归算法Bayesian Linear Regression | BLR

贝叶斯线性回归算法简介 频率主义线性回归概述 线性回归的频率主义观点可能你已经学过了:该模型假定因变量(y)是权重乘以一组自变量(x)的线性组合。完整的公式还包含一个误差项以解释随机采样噪声。如有两个自变量时…

excel系列(二) - 利用 easypoi 快速实现 excel 文件导入导出

一、介绍 在上篇文章中,我们介绍了 apache poi 工具实现 excel 文件的导入导出。 本篇我们继续深入介绍另一款优秀的 excel 工具库:easypoi。 二、easypoi 以前的以前,有个大佬程序员,跳到一家公司之后就和业务人员聊上了&…

Parallels Desktop 19 for Mac(PD19虚拟机)详细图文安装教程分享

Parallels Desktop 19是一款功能丰富、性能强大且易于使用的虚拟机软件,它可以让您在Mac上同时运行多个操作系统,为您提供更大的灵活性和兼容性。 Parallels Desktop 19 for Mac(PD19虚拟机)下载安装包 Parallels Desktop 19 for Mac(PD19虚拟机)详细图…

linux端口,进程管理,主机状态监控

linux端口,进程管理,主机状态监控 一、端口 1、什么是端口?2、端口的划分2、查看端口占用 二、进程 1、什么是进程2、查看进程信息2、关闭进程 三、主机状态监控 1、查看资源占用2、磁盘信息监控3、查看网络情况 四、命令总结 一、端口 1、什么是端口…

电力调度台如何助力电力指挥中心更智慧

在现代电力系统的复杂运行环境中,电力调度台正逐渐成为电力指挥中心实现智慧化管理的关键力量。 电力调度台具备强大的信息集成与处理能力。它能够将来自不同监测系统、传感器和数据源的海量数据汇聚一处,包括电力设备的实时运行状态、电力负荷的动态变化…

C++客户端Qt开发——常用控件(输入类控件)

4.输入类控件 ①Line Edit 单行输入框 属性 说明 text 输入框中的文本 input 输入内容格式约束 maxLength 最大长度 frame 是否添加边框 echoMode 显示方式 QLineEdit::Normal:这是默认值,文本框会显示输入的文本。 QLineEdit::Password&…

C++客户端Qt开发——常用控件(多元素控件)

5.多元素控件 Qt中提供的多元素控件有: QListWidget QListView QTablewidget QTableview QTreewidget QTreeview xxWidget和xView之间的区别 以QTableWidget和QTableView为例. QTableView是基于MVC设计的控件.QTableView自身不持有数据.使用QTableView的时候需要…

Django任务管理

1、用django-admin命令创建一个Django项目 django-admin startproject task_manager 2、进入到项目下用命令创建一个应用 cd task_manager python manage.py startapp tasks 3、进入models.py定义数学模型 第2步得到的只是应用的必要空文件,要开始增加各文件实际…

STM32(五):STM32指南者-按键控制灯开关实验

说明:源代码和教程可从野火处下载,本博客为了记录学习过程STM32(四):STM32指南者-跑马灯实验的基础上 一、采用轮询方式1、bsp_key.h2、bsp_key.c3、main.c 二、采用中断方式1、bsp_exti.h2、bsp_exti.c3、stm32f10x_i…