一 现状
项目中使用springboot作为框架,配置文件为application.yml。在部署多个实例的情况下,需要修改配置的时候需要在多个实例上进行修改并且需要重启才能生效。于是急求解决方案,可以实现统一配置以及实时生效。
其中,在寻找方案的过程中,有对比了三个方案:① 使用mysql数据库 ② 使用redis缓存 ③ 使用zookeeper
mysql | redis | zookeeper | |
可实现性 | √ | √ | √ |
实时性 | × | × | √ |
于是选择zookeeper作为统一配置中心。
二 原理
zookeeper作为配置中心的优势在于其自身的watch机制,可以随时发现一些数据的变化,从而达到数据的及时性。也就是zookeeper可以做到,只要数据一发生变化,就会通知相应地注册了监听的客户端。
设计思路: ① 在zookeeper中创建配置项。(可以安装zkui进行可视化操作 https://github.com/DeemOpen/zkui.git (github上zkui的下载地址),下载打包成可运行jar包,修改配置文件config.cfg,指定zookeeper地址,多个 zk实例用逗号分开。
② 后端程序中初始化时读取zookeeper的配置,存入jdk自带的Properties中(java.util.Properties)。
③ 在初始化方法中设置监听,监听zookeeper的配置节点的变化,从而实时的改变后端程序中的属性。
三 代码demo实现