SpringCloud-动态配置变化监控-获取变化(支持Config、Nacos)
SpringCloud-动态配置变化监控-获取变化(支持Config、Nacos)
qq交流群:
812321371
微信交流群:MercyYao
简介
配置中心有原生的 SpringCloud Config 、国内开源的 阿里 Nacos、携程 Apollo 等。
都是配置热加载的基础上增加了其他的功能。
配置中心具有配置热加载,修改配置 -> 推送到程序 -> 执行配置更新。
而获取配置更新的具体内容,这些组件都没有做到(SpringCloud Config、Nacos, Apollo待验证 )。如:获取变化的配置 test 更新前为 123 ,更新后为 111。
SpringCloud Config 、Nacos 、 Apollo待验证 配置更新都是将整个配置文件推送给服务进行配置对比结果进行更新。这个阶段用户无法从程序中获取更新的内容。
为了实现这个扩展功能点,更新结果可以让程序感知。
在这个阶段用户通过code可以实现配置监听, 监听到某个配置变化做其他操作等。
示例: 获取到推送配置变化, 感知到 test 发生变化, 做更新同步数据操作等等。
感知结果集如:
{
`被更新的配置key`:{
before: `原来的值`,
after: `更新后的值`
},
`被更新的配置key`:{
before: `原来的值`,
after: `更新后的值`
}
}
功能使用
添加依赖
ps: 实际version版本请使用最新版
最新版本:
<dependency>
<groupId>com.purgeteam</groupId>
<artifactId>dynamic-config-spring-boot-starter</artifactId>
<version>0.1.0.RELEASE</version>
</dependency>
当然实际情况要结合添加动态配置依赖包 SpringCloud Config 、 Nacos 、 Apollo 。
dynamic-config-spring-boot-starter 模块不包含以上依赖, 需要自行添加。
@EnableDynamicConfigEvent
简介: 开启这个特性注解,具备配置推送更新监听能力。
启动类添加 @EnableDynamicConfigEvent 注解开启配置变化监听功能。
@EnableDynamicConfigEvent
@SpringBootApplication
public class DynamicConfigSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(DynamicConfigSpringBootApplication.class, args);
}
}
编写事件接收器
创建 NacosListener(名称随意) 实现 ApplicationListener<ActionConfigEvent>#onApplicationEvent 方法
@Slf4j
@Component
public class NacosListener implements ApplicationListener<ActionConfigEvent> {
@Override
public void onApplicationEvent(ActionConfigEvent event) {
log.info("接收事件");
log.info(event.getPropertyMap().toString());
}
}
在 NacosListener#onApplicationEvent 方法里获取目标值, 作相应的逻辑处理。
ActionConfigEvent event:
public class ActionConfigEvent extends ApplicationEvent {
// 事件说明
private String eventDesc;
// 更新变化结果集
private Map<String, HashMap> propertyMap;
...
}
ActionConfigEvent 主要包含 Map<String, HashMap> propertyMap;, 从这里可以获取更新变化结果, propertyMap结构如下:
{
`被更新的配置key`:{
before: `原来的值`,
after: `更新后的值`
},
`被更新的配置key`:{
before: `原来的值`,
after: `更新后的值`
}
}
更新配置演示
ps: 示例为 Nacos 其它配置中心无差别。
原始配置:
test.age=18
user.name=purgeyao
修改配置:
# test.age 将18更新为19
test.age=19
user.name=purgeyao
在 NacosListener#onApplicationEvent 方法加入端点调试观察 ActionConfigEvent 对象参数。

更新的 test.age 已经被记录在了 ActionConfigEvent.propertyMap 里了, 从 18 更新为 19。
控制台打印:
2019-10-17 10:44:09.221 INFO 54054 --- [-10.1.1.97_8848] c.p.dynamic.config.demo.NacosListener : 接收事件
2019-10-17 10:45:19.752 INFO 54054 --- [-10.1.1.97_8848] c.p.dynamic.config.demo.NacosListener : {test.age={before=18, after=19}}
总结
上述功能基于 Nacos 、 SpringCloud Config 或基于 SpringCloud Config 之上构建的配置中心都可以使用, 其他配置中心待验证。
qq交流群:
812321371
微信交流群:MercyYao
示例代码地址:dynamic-config-spring-boot
SpringCloud-动态配置变化监控-获取变化(支持Config、Nacos)的更多相关文章
- 详解vuex结合localstorage动态监听storage的变化
这篇文章主要介绍了详解vuex结合localstorage动态监听storage的变化,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 需求:不同组件间共用同一数据,当一个 ...
- JDK 之 NIO 2 WatchService、WatchKey(监控文件变化)
JDK 之 NIO 2 WatchService.WatchKey(监控文件变化) JDK 规范目录(https://www.cnblogs.com/binarylei/p/10200503.html ...
- 使用inotify实现linux系统下的目录变化监控
近期,有个项目须要及时删除Nginx服务生成的缓存文件,因为不是非常了解Nginx缓存生成的策略,在网上也沒有细致找,经过大家讨论,终于希望引入liunx的inotify功能,监控某个liunx文件夹 ...
- 动手实现 Redux(二):抽离 store 和监控数据变化
上一节 的我们有了 appState 和 dispatch: let appState = { title: { text: 'React.js 小书', color: 'red', }, conte ...
- JS-改变页面的颜色之变化核心-获取六位的随机数
前言:从JS-改变页面的颜色(一).JS-改变页面的颜色(二).JS-改变页面的颜色(三)三个简单的小白例,我们可以轻而易举的看到起变化的核心是——十六进制颜色值的获取方式,所以,我们这里总结一下获取 ...
- Python监控文件变化:watchdog
Python监控文件变化有两种库:pyinotify和watchdog.pyinotify依赖于Linux平台的inotify,后者则对不同平台的的事件都进行了封装.也就是说,watchdog跨平台. ...
- mac 监控文件变化并重启php
自己撸一个框架,需要监控代码变化 安装fswatch brew install fswatch shell重启PHP脚本reload.sh #!/bin/sh do ps -ef | grep php ...
- Springboot定时任务实现动态配置Cron参数(从外部数据库获取)
https://blog.csdn.net/qq_35992900/article/details/80429245 我们主要讲解它的动态配置使用方法. 在刚开始使用的时候,我们更改一个任务的执行时间 ...
- 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值
[SpringCloud]Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了. 获取请求参数RequestBod ...
随机推荐
- SIA-GateWay之API网关安装部署指南
SIA-GATEWAY是基于SpringCloud微服务生态体系下开发的一个分布式微服务网关系统.具备简单易用.可视化.高可扩展.高可用性等特征,提供云原生.完整及成熟的接入服务解决方案.本文介绍AP ...
- 【LeetCode】BFS 总结
BFS(广度优先搜索) 常用来解决最短路径问题. 第一次便利到目的节点时,所经过的路径是最短路径. 几个要点: 只能用来求解无权图的最短路径问题 队列:用来存储每一层便利得到的节点 标记:对于遍历过的 ...
- 第一次作业:学习C++指针
1 内存空间的访问方式 计算机的内存存储器被划分为一个个存储单元.储存单元按一定的规则编号,这个编号就是存储单元的地址.地址编码的基本单位是字节,每个字节由8个二进制位组成,也就是说每个字节是一个基本 ...
- Lottie在手,动画我有:ios/Android/Web三端复杂帧动画解决方案
为什么需要Lottie 在相对复杂的移动端应用中,我们可能会需要使用到复杂的帧动画.例如: 刚进入APP时候可能会看到的入场小动画,带来愉悦的视觉享受 许多Icon的互动变化比较复杂多变的时候,研 ...
- Winform中使用FastReport的DesignReport时怎样给通过代码Table添加数据
场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- windows任务计划定时备份sqlserver数据库
使用windows的任务计划新建一个sqlserver数据库的定时备份任务 一. (我是以sqlserver2008r2数据库版本测试的)在G盘下新建文集夹Database_backup,首 ...
- 最大公共子序列(Runtime faster than 92.73% of Python3)
其中的算法思想只是较为简单的动态规划,过去各种各样的考试写过很多次C/C++版本的,最近开始用Python做leetcode中的题目时遇到了该题目,很常规的做法竟然得到了意想不到的速度,但内存占用较差 ...
- hadoop之hdfs命令详解
本篇主要对hadoop命令和hdfs命令进行阐述,yarn命令会在之后的文章中体现 hadoop fs命令可以用于其他文件系统,不止是hdfs文件系统内,也就是说该命令的使用范围更广可以用于HDFS. ...
- Cannot find class: com.mysql.jdbc.Driver错误及解决办法。
在刚刚开始搭建Mybatis源码解析,一步一步从浅入深 简单示例的时候,我使用的是mysql 5.1.12版本的驱动包.运行时出现如下错误: Cause: java.sql.SQLException: ...
- 大文件分割、命令脚本 - Python
日志文件分割.命名 工作中经常会收到测试同学.客户同学提供的日志文件,其中不乏几百M一G的也都有,毕竟压测一晚上产生的日志量还是很可观的,xDxD,因此不可避免的需要对日志进行分割,通常定位问题需要针 ...