前言
分布式缓存Redis也提供了类似的发布订阅功能,并且Redis本身提供了缓存和持久化的功能,本文将介绍通过Redis实现简单的参数集中式管理。
Maven引入
Spring相关的jar引入
目标
1.可以同时配置监听多个节点如/app1,/app2;
2.希望只需要配置如/app1,就能够监听其子节点如/app1/modual1以及子节点的子节点如/app1/modual1/xxx/…;
3.服务器启动能获取当前指定父节点下的所有子节点数据;
4.在添加节点或者在更新节点数据的时候能够动态通知,这样代码中就能够实时获取最新的数据;
5.spring配置中可以从Zookeeper中读取参数进行初始化。
虽然在实现的方式上有点区别,但是最终达成的目标是一致的,同样列出了这5条目标
实现
RedisWatcher主要用来和Redis进行连接,然后对监听的节点进行初始化,模糊订阅需要监听的节点,最后接受数据的变更,更新本地数据,存储数据等。
1.同时配置监听多个节点
提供一个字符串数组给用户用来添加需要监听的节点:
2.能够监听其子节点以及子节点的子节点
使用Redis提供的psubscribe命令,订阅一个或多个符合给定模式的频道,提供了模糊订阅的功能
提供了使用匹配符*的模糊匹配功能,组装带*号的匹配字符串
3.服务器启动初始化节点数据
通过使用keys命令来获取匹配节点的数据(keys命令可能引发性能问题,根据实际情况使用)
4.监听节点数据的变更
目标2中通过psubscribe命令,使用模糊订阅来监听数据的变更,onMessage用来接受变更的数据
5.spring配置中可以从Redis中读取参数进行初始化
通过以上的处理,可以使用如下简单的配置来达到目标:
测试
1.启动Redis服务器
2.启动Redis客户端进行初始化数据
3.启动Main类
4.启动RedisPublish
定时发布数据,同时查看集群节点的Main类日志输出
日志输出如下:
详细代码svn地址:http://code.taobao.org/svn/temp-pj/DynamicConf
总结
关于参数的集中式管理一共写了三篇文章,分别利用Zookeeper,MQ以及Redis来实现了一个简单的参数的集中式管理,但更多的只是提供了一个思路
离生产还有很大距离,本片文章也是这个系列的最后一篇,综合来看Zookeeper更加适合做参数的集中式管理平台,MQ方式本身没有提供存储的功能
只能作为一个中间层存在;而Redis方式虽然提供了持久化功能,但是会因为选择不同的持久化方式会出现丢数据的可能,还有就是本身的集群方式
并不是很完善;虽然Zookeeper本身并不是一个存储系统,但是紧紧用来存储少量的参数应该足够了。
网友评论