SpringCloud微服务应用-config配置中心(介绍、搭建、动态刷新、测试)
文章目录
- 前言
- 一、传统应用配置痛点
- 二、Config 配置中心介绍
- 三、服务端Config Server搭建
- 1.pom依赖
- 2.application启动类配置
- 3.application.yml配置
- 4.test-dev.xml(客户端应读取的配置)
- 5.项目结构
- 四、客户端Config Client搭建
- 1.pom依赖
- 2.application启动类配置
- 3.bootstrap.yml配置
- 4.application.yml配置
- 5.测试controller
- 6.项目结构
- 五.动态刷新
- 1.客户端Config client,添加spring-boot-starter-actuator依赖
- 2.Controller层添加注解@RefreshScope
- 3.客户端application.yml增加配置
- 4.客户端手动调用动态刷新接口
- 六.测试
- 1.调用TestController中config接口
- 2.调用TestController中override接口
- 3.调用TestController中refresh接口(动态刷新)
- 结尾
前言
在系统架构中,和安全、日志、监控等非功能需求同样,配置管理也是一种非功能需求。配置中心是整个微服务基础架构体系中的一个组件,如下图,它的功能看上去并不起眼,无非就是简单配置的管理和存取,但它是整个微服务架构中不可或缺的一环。另外,配置中心若是真得用好了,它还能推进技术组织持续交付和DevOps转型。
一、传统应用配置痛点
配置散乱格式不标准
有的用 properties 格式,有的用 xml 格式,还有的存 DB,团队倾向自造轮子,作法五花八门。主要采用本地静态配置,配置修改麻烦
配置修改通常须要通过一个较长的测试发布周期。在分布式微服务环境下,当服务实例不少时,修改配置费时费力。易引起生产事故
团队在发布的时候将测试环境的配置带到生产上,引起资损事故。配置缺少安全审计和版本控制功能
二、Config 配置中心介绍
配置中心实际上就是分布式系统中集中统一管理线上应用程序配置项的管理平台。
在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了。不仅如此,分散中还伴随着冗余,如下图所示:
创建配置中心,将配置从各个应用中剥离出来,对配置进行统一管理,应用自身不需要自己去管理配置。如下图所示:
总结起来最主要包括以下三方面核心功能:
配置统一管理
配置项的修改编辑统一在配置中心页面进行,还包括统一的配置版本管理、环境隔离、灰度发布以及热发布,在不重启应用的情况下使得修改的配置可以生效起作用。权限统一控制
主要控制其配置的读取权限以及修改权限,通过统一的权限管理提升运维效率。操作统一审计
记录用户操作修改配置的历史信息,这样在出现问题的时候可以进行复盘回查,同时进行操作审计。
三、服务端Config Server搭建
1.pom依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><!-- 动态刷新使用 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
2.application启动类配置
@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
3.application.yml配置
spring:application:name: config-server# 使用本地文件,也可配置成从git获取配置文件profiles:active:- nativecloud:config:server:native:search-locations: classpath:/configallow-override: trueoverride-none: trueoverride-system-properties: falsediscovery:enabled: truefail-fast: true
# 注册eureka地址,提供客户端eureka访问
eureka:client:serviceUrl:defaultZone: http://ip:port/eureka/
server:port: 8889
4.test-dev.xml(客户端应读取的配置)
profile:dev
spring:rabbitmq:host: 10.10.10.10port: 5672username: adminpassword: 123456test:override: client-serverrefresh: re3
5.项目结构
四、客户端Config Client搭建
1.pom依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency><!-- 动态刷新使用 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
2.application启动类配置
@SpringBootApplication
@EnableEurekaClient
public class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);}}
3.bootstrap.yml配置
创建bootstrap.yml配置,因为启动服务会优先采用这个文件的配置,然后是application.yml的配置,服务器启动核心配置可能在配置中心,所以必须创建bootstrap.yml,优先连接配置中心
spring:cloud:config:# 采用的是test-dev.yml,name是前缀,profile是后缀,label是git存放的分支节点(本次未使用)name: testprofile: devlabel: dev# 通过service-id(eureka服务名)连接配置中心discovery:enabled: trueservice-id: config-servereureka:client:serviceUrl:defaultZone: http://ip:port/eureka/
4.application.yml配置
server:port: 8888
spring:application:name: config-client
eureka:client:serviceUrl:defaultZone: http://ip:port/eureka/# 动态刷新使用
management:endpoints:web:exposure:# 暴露监控接口,*为全部接口include: '*'
5.测试controller
@RestController
@RefreshScope
public class TestController {@Value("${spring.rabbitmq.host}")String host;@Value("${test.override}")String override;@Value("${test.refresh}")String refresh;@RequestMapping("/config")public String getConfig(){return host;}@RequestMapping("/override")public String getOverride(){return override;}@RequestMapping("/refresh")public String getRefresh(){return refresh;}
}
6.项目结构
五.动态刷新
上述配置中已经包含了动态刷新配置,让我们一起看一下,是哪些配置起到的作用呢
1.客户端Config client,添加spring-boot-starter-actuator依赖
<!-- 动态刷新使用 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
2.Controller层添加注解@RefreshScope
@RestController
@RefreshScope
public class TestController
3.客户端application.yml增加配置
# 动态刷新使用
management:endpoints:web:exposure:# 暴露监控接口,*为全部接口include: '*'
4.客户端手动调用动态刷新接口
http://localhost:8888/actuator/refresh
六.测试
开启eureka,gateway,config server,config client服务,注意开启顺序
1.调用TestController中config接口
返回了server中mq的ip,正确
2.调用TestController中override接口
返回了server中test.override的配置,覆盖了client的test.override
3.调用TestController中refresh接口(动态刷新)
现在,我们修改server中test.refresh配置,由re2改为re3
重启client server(因为配置中心的配置文件采用的服务端管理,如果放置git可以不用重启)
重启完成后再起请求refresh接口
仍然返回re2,现在我们调用刷新接口
注意设置Post的header属性Content-Type=application/json
刷新成功,并返回了属性名称,再次请求refresh接口,得到最新的配置:re3
结尾
- 感谢大家的耐心阅读,如有建议请私信或评论留言。
- 如有收获,劳烦支持,关注、点赞、评论、收藏均可,博主会经常更新,与大家共同进步
SpringCloud微服务应用-config配置中心(介绍、搭建、动态刷新、测试)相关推荐
- 最新版Spring Cloud Alibaba微服务架构-Config配置中心篇
文章目录 前言 一.Config引入背景 1.文件相对分散 2.无法区分环境 3.无法实时更新 4.安全无法保证 二.Config引入配置 1.配置文件格式 1.1 命名空间(Namespace) 1 ...
- 微服务架构中配置中心的选择
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:r6d.cn/XsTR 目前公司内部微服务架构基础设 ...
- 微服务A读配置中心报Could not locate PropertySource错误
微服务A读配置中心报Could not locate PropertySource错误 项目场景: SpringCloud 搭建之微服务A通过配置中心(微服务)读取本地git仓库的配置文件micros ...
- Spring Cloud Alibaba入门教程-05【Alibaba微服务组件Nacos配置中心】
1. Nacos配置中心使用 官方文档: https://github.com/alibaba/springcloudalibaba/wiki/Nacosconfig Nacos 提供用于存储配 ...
- spring cloud+dotnet core搭建微服务架构:配置中心续(五)
前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...
- 微服务-Nacos动态配置中心
前言 回想之前的项目,尤其是项目分多模块的时候,一般就会有一个公共包大多是相关工具类,因为比较独立使得其他模块调用方便,现在出来个需求为工具类参数进行动态控制,比如Redis工具类动态设定过期时间,除 ...
- SpringCloud config 配置中心介绍与基本配置使用
一.SpringCloud Config 介绍 出现背景:在微服务架构中,在没有配置中心出现时,我们每个应用的配置信息都在其配置文件application.properties中维护.加入整个系统中有 ...
- SpringCloud集成Security安全(Config配置中心)
1.说明 为了保护配置中心的敏感数据, 需要对Config Server进行安全保护, 本文基于Spring Security方案, 为Config Server增加最简单的Basic安全认证. 2. ...
- SpringCloud微服务架构,Config 分布式配置中心,Bus 消息总线, Stream 消息驱动,Sleuth+Zipkin 链路追踪
Config分布式配置中心 Config 概述 概述 • Spring Cloud Config 解决了在分布式场景下多环境配置文件的管理和维护. • 好处: • 集中管理配置文件 • 不同环境不同配 ...
最新文章
- 大咖说:出道十五载,认知五迭代
- R语言R-markdown实战示例、R-markdown、R-markdown生成结果汇报的HTML文件
- OpenAI探索机器人模拟训练新方法:仿真与真实世界无缝衔接
- Java学习笔记14
- android fps 垂直同步,浅谈Android流畅度
- css实现图片自适应容器的几种方式
- php 警告提示框,关于javascript:php重定向到带有警告对话框的页面
- Laravel中数据库的操作
- 统计git仓库一些commit数据
- 使用vSphere Web Client导出/导入/还原分布式交换机配置(2034602)
- AndroidStudio安卓原生开发_Activity的启动模式部分singleTop启动模式和singleTask启动模式---Android原生开发工作笔记87
- 经典排序算法总结与Python实现(下)
- Sharepoint-拾贝
- Unity3D优化总结(一)
- Elasticsearch一些常用操作和一些基础概念
- zookeeper原理,与集群部署
- python实现自动打电话软件_用Python实现的Internet电话软件(P2P-SIP)开源
- 使用JS快速读取TXT文件
- 随机过程之平稳过程与各态历经过程
- 小白学习MySQL - MySQL会不会受到“高水位”的影响?