SpringCloud微服务(五)——Config分布式配置中心

news2025/1/16 15:04:18

SpringCloud Config分布式配置中心

SpringCloud

微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。

SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml,上百个配置文件的管理…/(ㄒoㄒ)/~~

简介

官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.1.RELEASE/reference/html/

SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置

SpringCloud Config分为服务端和客户端两部分。

服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口

客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。

在这里插入图片描述

作用:

  • 集中管理配置文件
  • 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
  • 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
  • 将配置信息以REST接口的形式暴露,post、curl访问刷新均可…

由于SpringCloud Config默认使用Git来存储配置文件(也有其它方式,比如支持SVN和本地文件),但最推荐的还是Git,而且使用的是http/https访问的形式。

服务端配置与测试

创建

远程配置中心是在github上面

新建配置中心微服务

依赖配置

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

application.yml:

server:
  port: 3344

spring:
  application:
    name: cloud-config-center
  cloud:
    config:
      server:
        git:
          uri: https://github.com/wzq-55552/springcloud-config.git #配置远程的仓库地址springcloud-config
          search-paths:
            - springcloud-config
      label: master #进到仓库的主分支

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

启动类:

/**
 * @author zzyy
 */
@SpringBootApplication
@EnableConfigServer
public class ConfigCenterMain3344 {
    public static void main(String[] args) {
        SpringApplication.run(ConfigCenterMain3344.class, args);
    }
}

测试

配置中心读取github配置以REST方式暴露出来

读取方式很多:

在这里插入图片描述
在这里插入图片描述

一个一个文件也行,一个yml文件包含多个环境也行,通过profiles区分。

github创建:

在这里插入图片描述

如果有其他分支,都可以访问,直接url上把master改成其他分支

访问github上面的文件:http://localhost:3344/master/application.yml

http://localhost:3344/application.yml效果一样,不加分支默认配置中的分支,为master

在这里插入图片描述

读取github上面application.yml文件中的不同环境内容

dev环境的值:http://localhost:3344/application/dev/master

在这里插入图片描述

test环境的值:http://localhost:3344/application/test/master

在这里插入图片描述

客户端配置与测试

创建

依赖配置

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

两种模式:根据具体场景

**一、**github上文件是config(application)-dev.yml、config(application)-test.yml、config(application)-prod.yml多个环境文件细分的,如下配置:

http://localhost.com:3344/master/config-dev.yml

http://localhost.com:3344/master/application-dev.yml

bootstrap.yml(该配置是与配置中心互通的,读取公有配置),applicaiton.yml是该微服务独有,特有的配置。该微服务需要2个配置文件。

server:
  port: 3355

spring:
  application:
    name: config-client
  cloud:
    config:
      label: master # 分支名称
      name: config # 配置文件名称,可自定义,最好application/config
      profile: dev # 读取的后缀,上述三个综合,为master分支上的config-dev.yml的配置文件被读取,http://localhost.com:3344/master/config-dev.yml
      uri: http://localhost:3344 #配置中心的地址

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka
  • applicaiton.yml是用户级的资源配置项
  • bootstrap.yml是系统级的,优先级更加高

Spring Cloud会创建一个Bootstrap Context,作为Spring应用的Application Context的父上下文。初始化的时候,Bootstrap Context负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的EnvironmentBootstrap属性有高优先级,默认情况下,它们不会被本地配置覆盖。 Bootstrap contextApplication Context有着不同的约定,所以新增了一个bootstrap.yml文件,保证Bootstrap ContextApplication Context配置的分离。

**二、**github上文件是一个application.yml,比如:

http://localhost:3344/application/dev/master

github配置内容

spring:
  profiles:
    active:
    - dev
---
spring:
  profiles: dev     #开发环境
  application: 
    name: microservicecloud-config-atguigu-dev
---
spring:
  profiles: test   #测试环境
  application: 
    name: microservicecloud-config-atguigu-test
#  请保存为UTF-8格式

如下配置:

bootstrap.yml(该配置是与配置中心互通的,公有配置),applicaiton.yml是该微服务独有,特有的配置。

server:
  port: 3355

spring:
  #application:
  #  name: config-client
  cloud:
    config:
      label: master # 分支名称
      name: application # 配置文件名称,可自定义,最好application/config
      profile: dev # 文件中的dev profile内容,上述三个综合,为master分支上的application.yml的配置文件中的dev内容被读取http://localhost:3344/application/dev/master
      uri: http://localhost:3344 #配置中心的地址

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

测试

这里测试,我采用第二种方式,都一样。

首先,我们客户端微服务是没有配置application.name的,但是却可以注册到服务注册中心,因为优先加载bootstrap.yml配置文件,读取到了github上的配置,这里测试例子的github配置有实例名。

controller测试读取配置中心的配置

@RestController
//@RefreshScope
public class ConfigClientController {

    @Value("${spring.application.name}")
    private String applicationName;

    @GetMapping("/applicationName")
    public String getApplicationName(){
        return applicationName;
    }
}

配置中心的配置读取,github上的:

在这里插入图片描述

客户端读取:

在这里插入图片描述

客户端动态刷新配置

问题:

linux运维修改Github上的配置文件内容

刷新3344,发现ConfigServer配置中心立刻响应

刷新3355,发现ConfigClient客户端的没有任何响应

3355没有变化除非自己重启或者重新加载,实际生产各种微服务都要重启?

为了避免每次更新配置都要重启客户端微服务3355,还需要完善配置中心

加上监控的依赖,服务端和客户端都加。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

客户端完整bootstrap.yml配置

server:
  port: 3355

spring:
#  application:
#    name: config-client
  cloud:
    config:
      label: master # 分支名称
      name: application # 配置文件名称,可自定义,最好application/config
      profile: dev # 文件中的dev profile内容,上述三个综合,为master分支上的application.yml的配置文件中的dev内容被读取http://localhost:3344/application/dev/master
      uri: http://localhost:3344 #配置中心的地址

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

#暴露监控端口
management:
  endpoints:
    web:
      exposure:
        include: "*"

controller上加上刷新注解@RefreshScope

运维人员得执行请求curl -X “http://localhost:3355/actuator/refresh”

必须是POST请求

这样就实现了客户端3355刷新到最新配置内容

每个微服务都要执行一次post请求,手动刷新?

这样也会很麻烦,微服务多了工作量太大,但是结合消息总线可以实现一次通知,处处生效。

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

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

相关文章

继承和多态

文章目录继承为什么要继承继承的概念继承的语法父类成员访问子类中访问父类的成员变量子类中访问父类的成员方法super关键字子类构造方法super和this再谈初始化protected关键字继承方式final关键字继承与组合多态多态的概念多态的实现条件重写向上转型和向下转型向上转型向下转…

GhostNetV2学习笔记

GhostNetV2学习笔记 GhostNetV2: Enhance Cheap Operation with Long-Range Attention Abstract 轻量级卷积神经网络(CNNs)是专为在移动设备上具有较快推理速度的应用而设计的。卷积运算只能捕获窗口区域的局部信息&#xff0c;这阻碍了性能的进一步提高。在卷积中引入自我注…

随时随地创建参数化3D模型—xDesign

在前文3DEXPERIENCE的文章里&#xff0c;我们给各位介绍了3DEXPERIENCE云平台的页面以及怎么点击到对应的平台角色和应用程序。 所以&#xff0c;接下来就给各位介绍云平台当中的应用程序的操作和使用方法。本篇文章主要介绍工程师们在工作中常要用到的3D建模的应用程xDesign&…

间隔一分钟按某个按键一次——VBS脚本

间隔一分钟按某个按键一次-VBS脚本 我们在玩游戏挂机的时候&#xff0c;有的时候长时间鼠标键盘不动一下&#xff0c;游戏就掉线了。或者居家办公出去做核酸检测&#xff0c;时间一长你的钉钉、企业微信等通讯工具就会显示离线状态&#xff0c;这个时候需要有个简易的小脚本帮…

第四章 决策树

4.1 基本流程 决策树是一类常见的机器学习方法。以二分类任务为例&#xff0c;其结构类似于二叉树。以西瓜问题为例&#xff0c;其结构如图所示&#xff1a; 一般的&#xff0c;一颗决策树包含一个根节点、若干个内部结点和若干个叶节点&#xff1b;叶节点对应决策结果&#…

全网最全斗音短视频新老账号起号技巧

大家好&#xff0c;我是我赢助手&#xff0c;专注于自媒体短视频去水印、去重和文案提取运营。 今天给大家分享下全网最全斗音短视频新老账号起号技巧 1、清理手机(手机登录新斗音号才需要清理) 安卓:打开设置-应用管理-斗音短视频-储存占用-清除缓存-卸载 双清方法:先在斗…

同花顺_代码解析_技术指标_Z_1

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 ZJ_01 ZJ_02 ZJ_05 ZMMZB ZNZ_ASR ZNZ_BYQD ZNZ_CBAND ZNZ_CBW ZNZ_CBXQD ZNZ_CKD ZNZ_CMACD ZNZ_CMGL ZNZ_CYBB ZJ_01 波段之星 "波段之星"指标为图形化指标。…

C---链表

目录链表的遍历计算链表节点个数查找结点节点后插入新节点节点前插入新节点1.目标节点为头节点 &#xff08;引起链表头变化&#xff09;2.目标节点不是头节点节点前插入新节点&#xff08;两种情况&#xff09;完整版删除节点课外知识&#xff1a;gcc ... -g1.删除头节点2.删的…

CS224W 6 Graph Neural Networks

目录 引入 node embedding Deep Graph Encoders的引入 Basics of Deep Learning Deep Learning for Graphs ​编辑A Naive Approach GCN GCN的基本idea Aggregate Neighbors 训练GCN Unsupervised Training Supervised Training Oview 整体流程 Inductive capabil…

等保三级,多级等保认证的一点了解

2022年11月21日10:28:28 信息安全等级保护管理办法 信息系统的安全保护等级分为以下五级&#xff1a; 第一级&#xff0c;信息系统受到破坏后&#xff0c;会对公民、法人和其他组织的合法权益造成损害&#xff0c;但不损害国家安全、社会秩序和公共利益。 第二级&#xff0c;信…

c++ 之安装opencv显示图片

额,要把yolo+pose+class从python转成c++,一整头大,从头开始试。 win11 + vs2022 c++_v14 + opencv4.6.0 安装opencv 从官网下载OpenCV https://opencv.org/releases/ 我是windows系统,没啥好说的,就是下个exe然后安装。 我是装在 D:\Program Files (x86)\ 目录下,之后…

(一)逻辑回归及其代价函数 --- 吴恩达深度学习笔记

逻辑回归 — 适用于二分类问题 使用逻辑回归算法会得到的输出标签y&#xff0c;y在监督问题中全是0或者1&#xff0c;因此这是一种针对二分类问题的算法。 给定的输入特征向量x和一幅图像对应&#xff0c;我们希望识别这是否是一张猫的图片。因此我们想要一种算法能够输出一个…

CRDB-事务层知识点

事务层负责维护事务的原子性&#xff0c;确保事务中的所有操作都被提交或中止。此外&#xff0c;事务层在事务之间维护可序列化的隔离—这意味着事务与其他事务的影响完全隔离。尽管多个事务可能同时进行&#xff0c;但每个事务的体验就像每次只运行一个事务—可序列化的隔离级…

PyTorch实现DCGAN(生成对抗网络)生成新的假名人照片实战(附源码和数据集)

需要数据集和源码请点赞关注收藏后评论区留言~~~ 一、生成对抗网络&#xff08;GAN&#xff09; GAN&#xff08;生成对抗网络&#xff09;是用于教授DL模型以捕获训练数据分布的框架&#xff0c;因此可以从同一分布中生成新数据。它们由两个不同的模型组成&#xff0c;生成器…

52、ElasticSearch 简单查询

1、DSL Query 分类2、DSL Query 基础语法 1、match_all&#xff0c;查询所有 2、全文检索查询 4、精确查询 5、地图查询 3、总结分析 本章学习了全文检索查询、精确查询、地图查询等。 1、全文检索查询&#xff1a; match&#xff1a;通过指定字段查询&#xff0c;不允许使用…

Activity、Fragment之间的传值

1、Activity和Activity之间传值 1、使用Intent 2、使用Intent结合Bundle IntentBundle 3、传自定义对象实现&#xff08;实现Serialzable接口&#xff0c;性能较差&#xff0c;系统自动处理&#xff09; 传自定义对象 4、传自定义对象&#xff08;实现Parcelable,性能较好…

nginx 单向链表

ngx_list_t是Nginx封装的链表容器&#xff0c;它在Nginx中使用得很频繁&#xff0c;例如HTTP的头部就是用 ngx_list_t来存储的。当然&#xff0c;C语言封装的链表没有C或Java等面向对象语言那么容易理解。 ngx_list_t单向链表与ngx_queue_t双向链表是完全不同的&#xff0c;它是…

小程序直播系统开发制作_分享视频直播系统开发对企业的好处

许多小伙伴可能会感到困惑&#xff0c;直播小程序怎么制作&#xff0c;有直播小程序制作教程吗&#xff1f;为什么选择直播小程序&#xff0c;它会给企业带来什么好处&#xff1f;下面小编给大家一一解答。 一、小程序直播系统开发制作教程 ① 进入开发工具选择所在行业的模板…

Multigrid reinforcement learning with reward shaping

摘要 基于势能的奖励塑形已被证明是提高强化学习agent收敛速度的有效方法。 这是一种以原则性方式将背景知识纳入时间差分学习的灵活技术。然而&#xff0c;问题仍然是如何计算用于塑形给予学习agent的奖励的势能。在本文中&#xff0c;我们提出了一种通过状态空间离散化来解决…

计算机毕业设计java+ssm的高校科研仪器共享平台-计算机毕业设计

项目介绍 高校科研仪器共享平台&#xff0c;是一个学校内部提供信息管理的平台&#xff0c;是完全的&#xff0c;高速的&#xff0c;开放的&#xff0c;其核心思想是提供一个以自然语言为主的用户界面&#xff0c;让用户能够更好的刚加方便快捷的管理科研仪器信息的一个渠道和…