SpringCloudBus实现配置文件动态更新
前言
在SpringCloud之配置中心(config)的使用的基础上加上SpringCloudBus实现配置文件动态更新
在此之前需要修改版本,否则会出现“Endpoint ID 'bus-env' contains invalid characters, please migrate to a valid format.”错误导致服务启动失败
springboot版本:
2.0.6.RELEASE
springcloud版本:
Finchley.SR2
由于使用bus中需要使用消息中间件来支持更新通知并且它支持RabbitMQ和Kfaka,所以还需要启动其中之一,本文使用RabbitMQ,安装使用可参考RabbitMQ的安装(linux版)和RabbitMQ的安装与基本使用(windows版)
config-server端
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<!-- 监控中心-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置文件
server.port=8050
spring.application.name=config-server
# 注册到服务注册中心
eureka.client.service-url.defaultZone=http://localhost:8090/eureka/
# github的仓库地址
spring.cloud.config.server.git.uri=https://github.com/kurean/springconfig.git
# github的文件路径
spring.cloud.config.server.git.searchPaths=repo
# github的分支,默认是master
spring.cloud.config.label=master
# 使用bus总线刷新配置文件
management.endpoints.web.exposure.include=bus-refresh //指定刷新地址
spring.cloud.bus.trace.enabled=true
# 使用rabbitmq传递消息
spring.rabbitmq.host=192.168.184.130
spring.rabbitmq.port=5672
spring.rabbitmq.username=test //可以自己在rabbitmq的web管理页面添加用户,不添加则可以使用默认账号guest
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=/vHost_test //不指定默认为/
config-client端
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
配置文件application.properties
spring.application.name=config-client
server.port=9006
# 使用rabbitmq传递消息
spring.rabbitmq.host=192.168.184.130
spring.rabbitmq.port=5672
spring.rabbitmq.username=test
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=/vHost_test
在使用远程配置文件数据的地方加上@RefreshScope注解测试使用
@RestController
@RefreshScope
public class ConfigClientController { @Value("${cs.name}")
String name;
@Value("${cs.age}")
String age; @GetMapping(value = "/hi")
public String hi(){
return "我的名字是:"+name+",年龄是:"+age;
}
}
当git上的参数值修改后,需要利用消息总线触发一个服务端configServer的/bus/refresh端点,而刷新所有客户端的配置,所以发送请求http://localhost:8050/actuator/bus-refresh手动刷新配置中心,这样就会通知所有的微服务进行修改校正从而达到不用自己手动重启微服务重新读取配置的目的,但是要注意的是这个请求必须是post请求,这里推荐使用postman调试接口工具
修改后配置服务端和客户端日志:


动态刷新定点通知
其目的就是原先是无差别通知,如果想要定点通知某个微服务,那么就发送请求http://localhost:8050/actuator/bus-refresh/{destination},至于这个destination,则由微服务的服务名+端口号组成,比如http://localhost:8050/actuator/bus-refresh/config-client:9006则表示只通知config-client这个微服务进行配置修改
SpringCloudBus实现配置文件动态更新的更多相关文章
- spring boot 配置文件动态更新原理 以Nacos为例
配置文件的动态更新 通常获取配置文件的方式 1, @Value 2. @ConfigurationProperties(Prefix) 如果是在运行时要动态更新的话, 第一种方式要在bean上加@Re ...
- asp.net core 配置文件动态更新
IOptions<T> //站点启动后,获取到的值永远不变 IOptionsSnapshot<T> //站点启动后,每次获取到的值都是配置文件里的最新值 (reloadOnCh ...
- kill -HUP pid 更改配置后不重新启动服务,动态更新配置文件
kill -HUP pid kill -HUP pid pid 是进程标识.如果想要更改配置而不需停止并重新启动服务,请使用该命令.在对配置文件作必要的更改后,发出该命令以动态更新服务配置. 根据约 ...
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入
上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...
- mybatis(二)接口编程 、动态sql 、批量删除 、动态更新、连表查询
原理等不在赘述,这里主要通过代码展现. 在mybatis(一)基础上,新建一个dao包,并在里面编写接口,然后再在xml文件中引入接口路径,其他不变,在运用阶段将比原始方法更节约时间,因为不用再去手动 ...
- [原创]一种简单的cocos2d-x动态更新方案
介绍一个曾经在cocos2d-x项目中使用过的动态更新方案,这个方案简单易行,针对小的项目非常有用. 这个方案有两个核心的关键词:JSON,MD5. 原理可以简单地概括为:服务端持有所有动态更新资源文 ...
- centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课
centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更 ...
- Spring Cloud(八):使用Spring Cloud Bus来实现配置动态更新
使用Spring Cloud Config我们能实现服务配置的集中化管理,在服务启动时从Config Server获取需要的配置属性.但如果在服务运行过程中,我们需要将某个配置属性进行修改,比如将验证 ...
- .NET6运行时动态更新限流阈值
昨天博客园撑不住流量又崩溃了,很巧正在编写这篇文章,于是产生一个假想:如果博客园用上我这个限流组件会怎么样呢? 用户会收到几个429错误,并且多刷新几次就看到了内容,不会出现完全不可用. 还可以降低查 ...
- [RPC学习]Dubbo+nacos实现动态更新内存RTree
1.背景 服务架构一般都是从 单体架构 -> 微服务架构 -> 分布式架构 的迭代,我上一家公司就是在业务发展到一定规模时,开始拆老的单体服务,按业务维度拆成多个微服务,服务之间用的是HT ...
随机推荐
- 虚拟化技术浅析第二弹之初识Kubernetes
作者:京东物流 杨建民 一.微服务架构起源 单体架构:可以理解为主要业务逻辑模块(我们编写的代码模块,不包括独立的中间件)运行在一个进程中的应用,最典型的是运行在一个Tomcat容器中,位于一个进程里 ...
- 一种面向业务配置基于JSF广播定时生效的工具
作者:京东物流 王北永 姚再毅 李振 1 背景 目前,ducc实现了实时近乎所有配置动态生效的场景,但是配置是否实时生效,不能直观展示每个机器上jvm内对象对应的参数是否已变更为准确的值,大部分时候需 ...
- Qt添加自定义控件
由于在自带的控件中没有发现滚动选择时间的控件,所以参考网上别人写的控件做了一点修改. 先看效果: 上代码: TimeScroll.h QT_BEGIN_NAMESPACE namespace Ui { ...
- python学习第四周总结
异常常见类型 异常处理语法结构 异常补充处理 异常处理实战应用 生成器对象 自定义生成器range()功能 yield冷门用法 生成器表达式 模块简介 模块的分类 导入模块的两种句式 导入模块补充说明 ...
- Spring Cloud 2022.0.1 Spring Cloud Zookeeper4.0
官网: https://spring.io/ 左侧菜单 向下找到 spring Cloud Zookeeper 所有我们希望看到的都在 Reference Doc 中,点击进入 连接zookeeper ...
- 真正“搞”懂HTTPS协议15之安全的定义
前面我们花了很大的篇幅来讲HTTP在性能上的改进,从1.0到1.1,再到2.0.3.0,HTTP通过替换底层协议,解决了一直阻塞性能提升的队头阻塞问题,在性能上达到了极致. 那么,接下来,我们来聊一聊 ...
- P28_全局配置 - 常用的全局配置项以及小程序窗口的组成部分
全局配置文件及常用的配置项 pages 记录当前小程序所有页面的存放路径 window 全局设置小程序窗口的外观 tabBar 设置小程序底部的 tabBar 效果 style 是否启用新版的组件样式 ...
- Javascript中0.1+0.2===0.3?怎么解决这个问题?
一.问题分析 计算机存储以二进制的方式,而0.1 在二进制中是无限循环的一个数字,所以会出现裁剪,精度丢失会出现,0.100000000000000002 === 0.1,0.200000000000 ...
- Vue搭建项目的完整流程 如何搭建一个完整的vue项目 vue项目架构
vue项目架构 技术栈:vue3.vue-router .vuex(和pinia).element plus .axios.ts.sass 1.安装vue3 脚手架+ ts vue create ad ...
- GoLang 的协程调度和 GMP 模型
GoLang 的协程调度和 GMP 模型 GoLang 是怎么启动的 关于 GoLang 的汇编语言,请查阅 参考文献[1] 和 参考文献[2] 编写一个简单的 GoLang 程序 main.go, ...