分布式服务框架Zookeeper如何配置管理
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要介绍了分布式服务框架Zookeeper如何配置管理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实现说明:客户端实现zoo
千家信息网最后更新 2025年01月31日分布式服务框架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安全错误
数据库的锁怎样保障安全
学ui设计 什么软件开发
打开应用服务器未响应是什么情况
sql数据库中二进制数据是什么
mc正版官方服务器
diy低功耗服务器
广东戴尔服务器高性价比选择
数据库中检索字段 KY 表示
工程信息与数据库系统
方舟为什么加入不了别人的服务器
网络安全是意识形态
软件开发的五个进度
软件开发c 面试题目
双鱼ip转换器服务器
服务器芯片厂商有哪些
网络安全 从我做起心得
四川联想服务器维修调试多少钱
福州市网络安全等级备案
数据库完整性有哪几种
网络安全手抄报图片壁纸ins
10家网络安全企业
网络安全团学心得体会800字
世界服务器登录不了怎么办
企业网络安全员证
网络安全进校园手抄报竖版
网络安全我知道作文800字
常宁市工商联数据库
软件开发现场笔试
投标软件开发承诺函
索引数据库搭建
网络安全主体责任明确
- 上一篇
关闭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