分布式服务框架Zookeeper如何配置管理
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要介绍了分布式服务框架Zookeeper如何配置管理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实现说明:客户端实现zoo
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
ruby 游戏服务器
无法连接用户管理服务器
数据库的筛选与查询
用数据库建立学生成绩表
艾尔登法环服务器在日本吗
数据库只能输出三位整数
opc服务器
服务器查看网口流量
杭州包拯互联网科技有限公司外包
通达利软件开发
网络安全综合保障岗
数据库表创建语句
联想服务器管理口用户名密码
更健康互联网科技
苹果手机黑名单数据库
东南大学sql数据库基础
计算机网络安全教程美食
守望先锋服务器实力排行
奉贤区网络技术服务哪个好
法院网络技术人员工作内容
网络安全官齐聚
代理服务器的分类
服务器纽扣电池电压多少正常
网络技术的发展概括
电销pc端系统软件开发
amongus服务器已断开连接
不同网络或网络安全域之间
咸宁民政局网络安全自查
从数据库提取记录汇总成sum表
软件开发是不是软件技术
- 上一篇
关闭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