分布式服务框架Zookeeper如何配置管理
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了分布式服务框架Zookeeper如何配置管理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实现说明:客户端实现zoo
千家信息网最后更新 2026年11月02日分布式服务框架Zookeeper如何配置管理
这篇文章主要介绍了分布式服务框架Zookeeper如何配置管理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
实现说明:
客户端实现zookeeper的watcher事件,监听节点的更新事件,zookeeper管理的节点配置有更新时,客户端会接收到更新事件,并作出相应的处理,本文代码只是一个简单的示例
服务端代码示例
/** * 包名:com.lencee.demo.zookeeper.config * 文件名:ConfigManager.java * 版本信息: * 日期:2015年1月23日-下午1:28:55 * */package com.lencee.demo.zookeeper.config;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.ZooKeeper;/** * *配置管理类
*
维护分布式配置
* @version 2015年1月23日 下午1:28:55 * */public class ConfigManager { private static ConfigManager configManager = null; //Zookeeper集群服务地址与端口 private static String zkUrl = "192.168.0.101:11001"; //配置结点根路径 private final static String ROOT = "/myConf"; //结点鉴权方式 private final static String AUTH_TYPE = "digest"; //结点鉴权密码 private final static String AUTH_PWD = "password"; private ZooKeeper zk = null; private ConfigManager(){} public synchronized static ConfigManager getInstance() throws Exception{ if (configManager == null) { configManager = new ConfigManager(); ZooKeeper zk = new ZooKeeper(zkUrl, 3000, new Watcher() { @Override public void process(WatchedEvent event) { System.out.println("事件类型:" + event.getType()); } }); while (zk.getState() != ZooKeeper.States.CONNECTED) { Thread.sleep(3000); } //给这个链接添加认证信息 zk.addAuthInfo(AUTH_TYPE, AUTH_PWD.getBytes()); configManager.setZk(zk); String rootValue = "测试环境配置"; if(zk.exists(ROOT, true)==null){ //结点不存在 zk.create(ROOT , rootValue.getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT); } } return configManager; } public void addNode(String path,byte[] data,CreateMode createMode) throws Exception{ if(!path.startsWith("/")){ throw new Exception("传入的路径没有以'/'开始"); } if(this.zk.exists(ROOT + path, true)==null){ //结点不存在 this.zk.create(ROOT + path, data, Ids.CREATOR_ALL_ACL, createMode); } } public void setDate(String path,byte[] data) throws Exception{ if(this.zk.exists(ROOT + path, true)==null){ addNode(path, data, CreateMode.PERSISTENT); }else{ zk.setData(ROOT + path, data, -1); } } /** * zk * * @return the zk * @since 1.0.0 */ public ZooKeeper getZk() { return zk; } /** * @param zk the zk to set */ public void setZk(ZooKeeper zk) { this.zk = zk; } public static void main(String[] args) throws Exception { ConfigManager cfm = ConfigManager.getInstance(); //添加数据库配置节点 String path = "/mysql"; String value = "测试环境Mysql配置"; cfm.setDate(path, value.getBytes()); //添加项目配置节点 String octopusPath = "/mysql/octopus"; String octopusValue = "资源系统"; cfm.setDate(octopusPath, octopusValue.getBytes()); //添加连接URL的配置 String urlPath = "/mysql/octopus/url"; String urlValue = "jdbc:mysql://test.xxx.com:3306/octopus?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&failOverReadOnly=false&maxReconnects=10"; cfm.setDate(urlPath, urlValue.getBytes()); //添加连接数据库的用户名配置 String userPath = "/mysql/octopus/username"; String userValue = "octopus"; cfm.setDate(userPath, userValue.getBytes()); //添加连接数据库的密码配置 String pwdPath = "/mysql/octopus/pwd"; String pwdValue = "octopus111"; cfm.setDate(pwdPath, pwdValue.getBytes()); }}
客户端代码
/** * 包名:com.lencee.demo.zookeeper.config * 文件名:ConfigClient.java * 版本信息: * 日期:2015年1月23日-下午2:15:49 * */package com.lencee.demo.zookeeper.config;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.ZooKeeper;/** * *配置应用端
*
读取分布式配置
* @version 2015年1月23日 下午2:15:49 * */public class ConfigClient implements Watcher{ // Zookeeper集群服务地址与端口 private static String zkUrl = "192.168.0.101:11001"; // 配置结点根路径 private final static String ROOT = "/myConf"; // 结点鉴权方式 private final static String AUTH_TYPE = "digest"; // 结点鉴权密码 private final static String AUTH_PWD = "password"; private ZooKeeper zk = null; private String url; private String username; private String pwd; public ConfigClient() { try { ZooKeeper zk = new ZooKeeper(zkUrl, 3000,this); while (zk.getState() != ZooKeeper.States.CONNECTED) { Thread.sleep(3000); System.out.println(); } //给这个链接添加认证信息 zk.addAuthInfo(AUTH_TYPE, AUTH_PWD.getBytes()); this.zk = zk; //读取服务端的配置 reflushValue(); } catch (Exception e) { e.printStackTrace(); } } /** * * reflushValue:将配置服务设置的配置更新到对象中
* @since 1.0.0 */ public void reflushValue() { try { this.url = new String(this.zk.getData(ROOT + "/mysql/octopus/url", true, null)); this.username = new String(this.zk.getData(ROOT + "/mysql/octopus/username", true, null)); this.pwd = new String(this.zk.getData(ROOT + "/mysql/octopus/pwd", true, null)); } catch (Exception e) { e.printStackTrace(); } } public void printValues(){ System.out.println("----------------当前配置---------------"); System.out.println("mysql.url:"+this.url); System.out.println("mysql.username:"+this.username); System.out.println("mysql.pwd:"+this.pwd); } @Override public void process(WatchedEvent event) { EventType eventType = event.getType(); if(Watcher.Event.EventType.None==eventType){ System.out.println("事件:连接服务成功"); }else if(Watcher.Event.EventType.NodeCreated==eventType){ System.out.println("事件:节点创建成功"); }else if(Watcher.Event.EventType.NodeChildrenChanged==eventType){ System.out.println("事件:子节点更新成功"); reflushValue(); printValues(); }else if(Watcher.Event.EventType.NodeDataChanged==eventType){ System.out.println("事件:节点更新成功"); reflushValue(); printValues(); }else if(Watcher.Event.EventType.NodeDeleted==eventType){ System.out.println("事件:节点删除成功"); } } /** * url * * @return the url * @since 1.0.0 */ public String getUrl() { return url; } /** * username * * @return the username * @since 1.0.0 */ public String getUsername() { return username; } /** * pwd * * @return the pwd * @since 1.0.0 */ public String getPwd() { return pwd; } public static void main(String[] args) throws Exception { ConfigClient cc = new ConfigClient(); System.out.println("客户端开始运行"+cc); while(true){ Thread.sleep(3000); } }}
感谢你能够认真阅读完这篇文章,希望小编分享的"分布式服务框架Zookeeper如何配置管理"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
配置
事件
服务
结点
节点
更新
成功
分布式
管理
信息
客户
客户端
篇文章
代码
密码
数据
数据库
路径
框架
地址
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
蓝思科技飞鸽互联网
重生之互联网科技帝国
科技股互联网
互联网科技保险
今日互联网科技
互联网科技垄断
互联网 科技创业
互联网科技论文
四川狮子座互联网科技
太原新华互联网科技学校怎么样
互联网实体化科技化
字节跳动和互联网科技
栖莱科技互联网股份有限公司
恒生互联网科技指数跳水
开一家科技互联网公司需要多少钱
允成互联网科技有限公司融资
互联网科技圈年度人物
萌小萌互联网科技河南有限公司
互联网科技博主张洲
颐高云石互联网科技
易互联网科技有限公司
嘟嘟瓜互联网科技
时间互联网络科技
广州善班互联网科技
互联网金融监管科技
恒银科技与互联网金融
恒生互联网科技指数跳水
每天都有哪些好的互联网科技
上海创道互联网络科技有限公司
济南小医互联网科技有限公司招聘
- 上一篇
关闭EBS后重新开启出现concurrent manager异常及cmclean.sql慢问题该怎么办
今天就跟大家聊聊有关关闭EBS后重新开启出现concurrent manager异常及cmclean.sql慢问题该怎么办,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家
- 下一篇
CentOS/Oracle Linux 7.6安装IBM Domino V10
1. DOMINO V10 安裝正式應用優化是採用Minimal進行最小化部署,以提升系統的安全與穩定性。本文檔是採用OracleLinux 7.6以最小化桌面環境上進行安裝,適用於初階接受LINUX