Zookeeper与统一配置管理
目录
统一配置管理简介
代码开发
注意:本文参考 什么是ZooKeeper?
基于zookeeper实现统一配置管理_菜 头的博客-CSDN博客_zookeeper统一配置管理
统一配置管理简介
比如我们现在有三个系统A、B、C,他们有三份配置,分别是ASystem.yml、BSystem.yml、CSystem.yml
,然后,这三份配置又非常类似,很多的配置项几乎都一样。
此时,如果我们要改变其中一份配置项的信息,很可能其他两份都要改。并且,改变了配置项的信息很可能就要重启系统
于是,我们希望把ASystem.yml、BSystem.yml、CSystem.yml
相同的配置项抽取出来成一份公用的配置common.yml
,并且即便common.yml
改了,也不需要系统A、B、C重启。
做法:我们可以将common.yml
这份配置放在ZooKeeper的Znode节点中,系统A、B、C监听着这个Znode节点有无变更,如果变更了,及时响应。
代码开发
下面基于zookeeper粗略实现了一个统一配置管理
需要用到的jar是zkclient
配置文件Config
package com.cwh.zk.util;import java.io.Serializable;public class Config implements Serializable{/*** */private static final long serialVersionUID = 1L;private String userNm;private String userPw;public Config() {}public Config(String userNm, String userPw) {this.userNm = userNm;this.userPw = userPw;}public String getUserNm() {return userNm;}public void setUserNm(String userNm) {this.userNm = userNm;}public String getUserPw() {return userPw;}public void setUserPw(String userPw) {this.userPw = userPw;}@Overridepublic String toString() {return "Config [userNm=" + userNm + ", userPw=" + userPw + "]";}}
配置管理中心ZkConfigMag
package com.cwh.zk.util;import org.I0Itec.zkclient.ZkClient;public class ZkConfigMag {private Config config;/*** 从数据库加载配置*/public Config downLoadConfigFromDB(){//getDBconfig = new Config("nm", "pw");return config;}/*** 配置文件上传到数据库*/public void upLoadConfigToDB(String nm, String pw){if(config==null)config = new Config();config.setUserNm(nm);config.setUserPw(pw);//updateDB}/*** 配置文件同步到zookeeper*/public void syncConfigToZk(){ZkClient zk = new ZkClient("localhost:2181");if(!zk.exists("/zkConfig")){zk.createPersistent("/zkConfig",true);}zk.writeData("/zkConfig", config);zk.close();}
}
应用监听实现ZkGetConfigClient
package com.cwh.zk.util;import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;public class ZkGetConfigClient {private Config config;public Config getConfig() {ZkClient zk = new ZkClient("localhost:2181");config = (Config)zk.readData("/zkConfig");System.out.println("加载到配置:"+config.toString());//监听配置文件修改zk.subscribeDataChanges("/zkConfig", new IZkDataListener(){@Overridepublic void handleDataChange(String arg0, Object arg1)throws Exception {config = (Config) arg1;System.out.println("监听到配置文件被修改:"+config.toString());}@Overridepublic void handleDataDeleted(String arg0) throws Exception {config = null;System.out.println("监听到配置文件被删除");}});return config;}public static void main(String[] args) {ZkGetConfigClient client = new ZkGetConfigClient();client.getConfig();System.out.println(client.config.toString());for(int i = 0;i<10;i++){System.out.println(client.config.toString());try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
测试,启动配置管理中心
package com.cwh.zkConfig.test;import com.cwh.zk.util.Config;
import com.cwh.zk.util.ZkConfigMag;public class ZkConfigTest {public static void main(String[] args) {ZkConfigMag mag = new ZkConfigMag();Config config = mag.downLoadConfigFromDB();System.out.println("....加载数据库配置...."+config.toString());mag.syncConfigToZk();System.out.println("....同步配置文件到zookeeper....");//歇会,这样看比较清晰try {Thread.sleep(10000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}mag.upLoadConfigToDB("cwhcc", "passwordcc");System.out.println("....修改配置文件...."+config.toString());mag.syncConfigToZk();System.out.println("....同步配置文件到zookeeper....");}}
测试结果:
配置管理中心打印:
Zookeeper与统一配置管理相关推荐
- Nacos如何实现统一配置管理
统一配置管理 先看一下我们的service与nacos 的流程图 一.在nacos中增加配置 Nacos配置管理 Data Id :配置文件名称,命名规则: 服务名称-运行环境环境-后缀名(.yml, ...
- DuiC 统一配置管理 2
为什么设计 DuiC 在工作中我们时常要根据不同环境配置不同的参数,让项目的灵活性.可用性变得更高,那灵活的配置就变得必不可少,虽然目前已经存在很多配置管理解决方案,但是管理方式局限性大,适应范围窄. ...
- ZooKeeper学习笔记—配置管理
为什么80%的码农都做不了架构师?>>> 最近在工作中,为了完善公司集群服务的架构,提高可用性,降低运维成本,因此开始学习ZooKeeper. 至于什么是ZooKeep ...
- spring cloud config 统一配置管理
Spring Cloud为开发人员提供了在分布式系统中快速构建一些常见模式的工具(例如配置管理.服务发现.断路器.智能路由.微代理.控制总线.一次性令牌.全局锁.领导选举.分布式会话)等等20多个项目 ...
- 图解ZooKeeper!小学生也能看懂!
一.什么是ZooKeeper 从上面我们也可以发现,好像哪都有ZooKeeper的身影,那什么是ZooKeeper呢?我们先去官网看看介绍: 官网对ZooKeeper的介绍 官网还有另一段话: Zoo ...
- zookeeper中展示所有节点_分布式协调服务之Zookeeper
??理论篇 一.基础概念 ZooKeeper是开源分布式协调服务,提供高可用.高性能.稳定的分布式数据一致性解决方案,通常被用于实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理. ...
- Zookeeper介绍、原理及应用
Zookeeper简介 Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理 ...
- 什么是ZooKeeper?
上次写了一篇 什么是消息队列?以后,本来想入门一下Kafka的(装一下环境.看看Kafka一些概念啥的).后来发现Kafka用到了ZooKeeper,而我又对ZooKeeper不了解,所以想先来学学什 ...
- java 二分搜索获得大于目标数的第一位_Java后端架构师技术图谱,你都了解多少?...
前言 欢迎工作一到五年的Java工程师朋友们加入我们,私信回复[资料]即可获取我们提供免费的Java架构学习资料(里面有高可用.高并发.高性能及分布式.Jvm性能调优.Spring源码, MyBati ...
最新文章
- 面试必备:4种经典限流算法讲解
- Xcode9的xib只支持iOS7.0及以上版本
- Python爬虫四(正则表达式)
- php使用未定义常数,php-使用未定义的常量SIGTERM-gt;假定为’SIGTERM’
- 2017 Multi-University Training Contest - Team 3 Kanade's trio(字典树+组合数学)
- uboot研读笔记 | 14 - uboot启动流程分析(2016.03版本)
- 易语言服务器ping,Ping网络IP地址易语言源码
- 代码 点胶gcode_3D打印☞Gcode代码详解(含详解PDF附件)
- 两个列向量相乘怎么计算_两个矩阵相乘怎么算?
- 知识图谱的构建及用Neo4j和grapheco/InteractiveGraph实现知识图谱的可视化
- 含有使字的诗句_带有使字的诗-带有使字的诗句
- 程序写情诗|专属于程序员的浪漫
- 四、函数的基本概念和使用
- Visio中插入Mathtype公式
- asp毕业设计——基于asp+sqlserver的旅游网站设计与实现(毕业论文+程序源码)——旅游网站
- mariadb Galera集群部署
- HL7 标准及实现指南 必看的网址
- 羊皮卷的故事-第三章
- 2022年全国职业技能大赛网络安全竞赛试题B模块自己解析思路(2)
- 计算机辅助绘图考试题,CAD绘图员(往年考试题)练习题