探索Spring Cloud Config:构建高可用的配置中心

目录
  • 认识Spring Cloud Config
  • Config Server读取配置文件
  • 步骤1:
    • (1)创建config-server项目
    • (2)在config-server中开启Config Server功能
    • (3)在config-server配置文件进行相关配置
    • (4)在config-server中创建配置文件
  • 步骤2:搭建Config Client
    • (1)创建config-client项目,导入依赖
    • (2)在config-client配置文件进行相关配置
    • (3)在config-client中添加方法
  • 步骤3:测试运行
  • 从Git仓库读取配置文件
    • 步骤1:创建Git远程仓库并创建配置文件
      • (1)百度搜索“码云”,打开Git官网并注册登录
      • (2)登录成功后,创建仓库
      • (3)创建仓库成功后,在仓库中新建yml文件,输入配置内容提交,然后点击加号,新建文件夹
    • 步骤2:修改Config Server的配置文件
    • 步骤3:测试运行
    • bootstrap.yml与application.yml的区别
  • 搭建高可用Config Server
    • 步骤1:创建Eureka Server
    • 步骤3:改造Config Client项目
    • 步骤4:搭建Config Server集群
    • 步骤5:测试运行

认识Spring Cloud Config

概述:Spring Cloud Config为Spring应用提供了便捷的配置管理解决方案,并且可以与其他编程语言编写的应用程序协同工作。

Spring Cloud Config通过配置服务器(即Config Server)和配置客户端(即Config
Client)为分布式系统提供外部配置支持。

Config Server作为一个独立的微服务,负责从Git等存储库加载配置并向需要它的微服务公开这些配置信息。

该方案支持环境隔离功能,能够实现多环境的代码共享以及针对特定环境的配置管理需求。

所有环境配置数据由中央服务器统一维护,并通过Git进行版本控制。

为了保护敏感信息的安全,它提供了加密与解密机制,并可通过@EnableConfigServer注解轻松集成到Spring Boot应用中。

此外,这种集中管理方式确保了配置信息的一致性和安全性,同时简化了跨环境部署的复杂性。


Config Client -> Config Server ->git Repo

Config Server读取配置文件

从本地仓库读取配置文件

步骤:
1.搭建config-server

2.搭建config-client

3.测试运行

步骤1:

创建父工程config-1,在其中搭建Config Server

(1)创建config-server项目

导入依赖

使用Spring Initializr方式创建一个名称为config-server的Spring Boot项目,将Artifact命名为config-server,添加Config Server、Test依赖。其中Config Server依赖如下:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId><version>2.0.0.RELEASE</version>
</dependency>

(2)在config-server中开启Config Server功能

在程序的启动类ConfigServerApplication添加@EnableConfigServer注解,开启Config Server功能。
在这里插入图片描述

(3)在config-server配置文件进行相关配置

在项目的配置文件application.yml中进行相关配置,包括指定服务名、端口号、本地读取配置以及读取路径。
在这里插入图片描述

(4)在config-server中创建配置文件

在项目的resource目录下建一个 bushuo 文件夹,用于存放本地配置文件。在 bushuo目录下,新建一个config-client-dev.yml文件,用作后续将要创建的config-client工程的dev开发环境的配置文件。在config-client-dev.yml配置文件中,配置端口号和自定义变量。
在这里插入图片描述

步骤2:搭建Config Client

(1)创建config-client项目,导入依赖

使用Spring Initializr方式创建一个名称为config-client的Spring Boot项目,将Artifact命名为config-client,添加Config、Web和Test的起步依赖。其中Config依赖如下:

 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId><version>2.0.0.RELEASE</version></dependency>

在这里插入图片描述

(2)在config-client配置文件进行相关配置

在resources文件下新建bootstrap.yml文件。
在这里插入图片描述

(3)在config-client中添加方法

为了更直观的看到配置文件config-client-dev.yml被读取,创建controller包下的ConfigController类,添加一个hi()方法进行测试。
在这里插入图片描述

步骤3:测试运行

先启动config-server项目,再启动config-client项目,观察config-client控制台日志。

使用浏览器访问config-client的请求方法:http://localhost:8002/hi。

观察输出结果。

在这里插入图片描述

从Git仓库读取配置文件

步骤:

1.创建Git远程仓库并创建配置文件
2.修改Config Server的配置文件
3.测试运行

步骤1:创建Git远程仓库并创建配置文件

在远程Git仓库创建一个名称为hello的公开仓库,然后在公开库中创建一个和config-client-dev.yml相同的文件。

(1)百度搜索“码云”,打开Git官网并注册登录

gitee

(2)登录成功后,创建仓库

在这里插入图片描述
新建仓库内容如下:

在这里插入图片描述

(3)创建仓库成功后,在仓库中新建yml文件,输入配置内容提交,然后点击加号,新建文件夹

在这里插入图片描述
在这里插入图片描述
往下翻,点击提交

步骤2:修改Config Server的配置文件

在这里插入图片描述
点击“克隆”按钮复制uri地址,修改username与password的值为登录Git的用户名和密码。
在这里插入图片描述

修改Config Server的配置文件application.yml。配置服务名、端口号、远程Git仓库的地址、文件夹地址、用户名、密码、分支名等。
在这里插入图片描述

步骤3:测试运行

重启config-server和config-client,观察config-client控制台日志。

使用浏览器访问http://localhost:8002/hi。
在这里插入图片描述

bootstrap.yml与application.yml的区别

加载顺序:若application.yml 和bootstrap.yml 在同一目录下:bootstrap.yml 先加载 application.yml后加载
配置区别:bootstrap.yml 和 application.yml 都可以用来配置参数。
bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootstrap.yml 被加载,则内容不会被覆盖。
application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。
属性覆盖问题:application.yml 的内容标签与 bootstrap 的标签一致,application 也不会覆盖 bootstrap,而 application.yml 里面的内容可以动态替换


注意
git的配置文件与项目name一致
思考:

为新的config客户端config-client-another,在Git中添加配置文件,运行测试。

(1)创建config-client-another项目,导入依赖

其中Config依赖如下:

 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId><version>2.0.0.RELEASE</version></dependency>

(2)在resources 新建bootstrap.yml文件
在这里插入图片描述

spring:application:name: config-client-anothercloud:config:uri: http://localhost:8001fail-fast: trueprofiles:active: dev

(3)添加方法:创建controller包,configcontroller,添加方法hello1,进行测试

package com.bushuo.configclientanother.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class configcontroller {@Value( "${hello1}" )String hello1;@RequestMapping(value = "/hello1")public String hello1(){return hello1;}
}

在这里插入图片描述
(4)在git中在hello下创建config-client-another-dev.yml
在这里插入图片描述
(5)运行测试
在这里插入图片描述

搭建高可用Config Server

服务实例很多时,所有的服务实例需要同时从配置中心Config Server读取配置文件,这时可以考虑将配置中心Config Server做成一个集群化的微服务,从而达到高可用。将Config Server和Config Client注册在Eureka Server.

步骤:
1.创建Eureka Server

2.改造Config Server项目

3.改造Config Client项目

4.搭建Config Server集群

5.测试运行

步骤1:创建Eureka Server

步骤1:创建项目,引入依赖

1)
使用Spring Initializr方式创建一个名称为eureka-server的Spring Boot项目,将Artifact命名为eureka-server,在pom.xml文件中添加Eureka Server依赖。

方便测试效果,新建一个eureka-server项目作为Config Server的注册中心,将eureka-server端口号设置为7001。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.bushuo</groupId><artifactId>eureka-server</artifactId><version>0.0.1-SNAPSHOT</version><name>eureka-server</name><description>Demo project for Spring Boot</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Finchley.SR2</version> <type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

与springboot一致 2.0.6.RELEASE 的springcloud的依赖 Finchley.SR2 —

2):添加Eureka的相关配置

在全局配置文件application.yml中添加Eureka的相关配置信息。
在这里插入图片描述

3):在项目启动类添加@EnableEurekaServer注解

在项目启动类EurekaServerApplication上添加@EnableEurekaServer注解开启Eureka Server功能。
在这里插入图片描述
4)测试运行 http://localhost:7001
在这里插入图片描述
步骤2:改造Config Server项目

(1)Config Server作为服务器,需要在工程中的pom.xml配置文件中加入Eureka Client依赖。

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Finchley.SR2</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

(2)在项目的启动类ConfigServerApplication添加@EnableEurekaClient和 @EnableConfigServer注解,开启Eureka Server和Config Server功能。

在这里插入图片描述

(3)修改配置文件application.yml文件,为Config Server指定服务注册的地址等信息。

步骤3:改造Config Client项目

(1)在pom文件中加入Eureka Client起步依赖。在项目启动类上添加@EnableEurekaClient注解启动Eureka Client功能。
在这里插入图片描述
在配置文件bootstrap.yml加入指定服务注册地址等相关配置,配置如下:
在这里插入图片描述

步骤4:搭建Config Server集群

搭建高可用的Config Server服务只需要将Config Server多实例部署,使用Spring Initializr方式创建一个名称为config-server2的Config Server项目,设置端口号为8003,服务名也为config-server,其他配置信息和搭建过程与config-server项目一致。

步骤5:测试运行

使用浏览器访问http://localhost:7001。

在这里插入图片描述
访问config-client的请求方法:http://localhost:8002/hi。观察输入结果。

在这里插入图片描述

停掉config-server服务,再次访问请求,观察还能否正常访问?
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

CSDN博客导出设置介绍

在CSDN编辑博客时&#xff0c;如果想导出保存到本地&#xff0c;可以选择导出为Markdown或者HTML格式。其中导出为HTML时有这几种选项&#xff1a;jekyll site&#xff0c;plain html&#xff0c;plain text&#xff0c;styled html&#xff0c;styled html with toc。分别是什…

代理对象中使用this

一、问题引出 业务逻辑层代码 Service public class DemoServiceImpl extends ServiceImpl<DemoMapper, Demo> implements DemoService, ApplicationContextAware {// 用于从Spring容器中获取指定Bean的对象private ApplicationContext applicationContext;// 通过Appl…

视觉图像坐标转换

1. 透镜成像 相机的镜头系统将三维场景中的光线聚焦到一个平面&#xff08;即传感器&#xff09;。这个过程可以用小孔成像模型来近似描述&#xff0c;尽管实际相机使用复杂的透镜系统来减少畸变和提高成像质量。 小孔成像模型&#xff1a; 假设有一个理想的小孔&#xff0c;…

Hadoop之01:HDFS分布式文件系统

HDFS分布式文件系统 1.目标 理解分布式思想学会使用HDFS的常用命令掌握如何使用java api操作HDFS能独立描述HDFS三大组件namenode、secondarynamenode、datanode的作用理解并独立描述HDFS读写流程HDFS如何解决大量小文件存储问题 2. HDFS 2.1 HDFS是什么 HDFS是Hadoop中的一…

C语言(18)------------>函数(1)

本文介绍C语言函数的定义、标准库和库函数、自定义函数、函数中形式参数和实际参数。通过举例子和画图的方式分解每一个知识点&#xff0c;并结合生活案例和已知知识来解释函数知识。从而使得读者对C语言的函数理解更加深入&#xff0c;学习到C语言开发软件的一些实用技巧。 一…

apload-lab打靶场

1.提示显示所以关闭js 上传<?php phpinfo(); ?>的png形式 抓包&#xff0c;将png改为php 然后放包上传成功 2.提示说检查数据类型 抓包 将数据类型改成 image/jpeg 上传成功 3.提示 可以用phtml&#xff0c;php5&#xff0c;php3 4.先上传.htaccess文件&#xff0…

【Linux】TCP协议

文章目录 &#x1f449;TCP协议&#x1f448;TCP协议段格式确认应答机制窗口大小六个标记位连接管理机制三次握手四次挥手超时重传流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP应用层协议TCP与UDP的对比用UDP实现可靠传输 &#x1f4…

《HelloGitHub》第 107 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

商城系统单商户开源版源码

环境配置 1.软件安装 宝塔安装系统软件:Nginx、MySQL5.6、PHP( PHP用7.1-7.4版本)、phpMyAdmin(Web端MySQL管理工具)。 2.配置mysql 设置mysql&#xff0c;在已安装的软件里面找到 mysql点击进行设置 3.修改sql-mode 选择左侧配置修改&#xff0c;找到里面的sql-mode&…

DeepSeek 与云原生后端:AI 赋能现代应用架构

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 在当今快速发展的互联网时代&#xff0c;云原生&#xff08;Cloud Native&#xff09;架构已成为后端开发的主流趋势。云…

Kafka面试题及原理

1. 消息可靠性&#xff08;不丢失&#xff09; 使用Kafka在消息的收发过程都会出现消息丢失&#xff0c;Kafka分别给出了解决方案 生产者发送消息到Brocker丢失消息在Brocker中存储丢失消费者从Brocker 幂等方案&#xff1a;【分布式锁、数据库锁&#xff08;悲观锁、乐观锁…

Python学习第十八天之深度学习之Tensorboard

Tensorboard 1.TensorBoard详解2.安装3.使用4.图像数据格式的一些理解 后续会陆续在词博客上更新Tensorboard相关知识 1.TensorBoard详解 TensorBoard是一个可视化的模块&#xff0c;该模块功能强大&#xff0c;可用于深度学习网络模型训练查看模型结构和训练效果&#xff08;…

idea生成自定义Maven原型(archetype)项目工程模板

一、什么是Maven原型&#xff08;Maven archetype&#xff09; 引自官网的介绍如下&#xff1a; Maven原型插件官网地址 这里采用DeepSeek助手翻译如下&#xff1a; Maven 原型 什么是原型&#xff1f; 简而言之&#xff0c;原型是一个 Maven 项目模板工具包。原型被定义为一…

Hadoop架构详解

Hadoop 是一个开源的分布式计算系统&#xff0c;用于存储和处理大规模数据集。Hadoop 主要由HDFS&#xff08;Hadoop Distributed File System&#xff09;、MapReduce、Yarn&#xff08;Jobtracker&#xff0c;TaskTracker&#xff09;三大核心组件组成。其中HDFS是分布式文件…

计算机毕设JAVA——某高校宿舍管理系统(基于SpringBoot+Vue前后端分离的项目)

文章目录 概要项目演示图片系统架构技术运行环境系统功能简介 概要 网络上许多计算机毕设项目开发前端界面设计复杂、不美观&#xff0c;而且功能结构十分单一&#xff0c;存在很多雷同的项目&#xff1a;不同的项目基本上就是套用固定模板&#xff0c;换个颜色、改个文字&…

利用 LangChain 和一个大语言模型(LLM)构建一个链条,自动从用户输入的问题中提取相关的 SQL 表信息,再生成对应的 SQL 查询

示例代码&#xff1a; from langchain_core.runnables import RunnablePassthrough from langchain.chains import create_sql_query_chain from operator import itemgetter from langchain.chains.openai_tools import create_extraction_chain_pydantic# 系统消息&#xff…

DeepSeek 助力 Vue 开发:打造丝滑的表单验证(Form Validation)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

云服务培训五-数据库服务

如上图所圈&#xff0c;这次主要学习云数据库RDS for MySQL、GaussDB和GeminiDB相关内容。 一、结构化数据、非结构化数据 选择数据库时&#xff0c;首先从模型上分析&#xff0c;是否涉及事务处理、复杂的查询关联&#xff0c;还是数据量大、有并发访问需求。同理&#xff0c;…

【愚公系列】《Python网络爬虫从入门到精通》036-DataFrame日期数据处理

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

类和对象进一步了解c++

初始化列表 虽然构造函数能帮助我们完成初始化&#xff0c;但其实也就是构造函数赋值而已&#xff0c;根本不算真正的初始化。 所以&#xff0c;祖师爷就提出了一个初始化列表&#xff0c;用来初始化成员变量。 注意 每个成员变量在初始化列表中最多出现一次(初始化只能初始…