1、同步创建节点
package com.zk.clientapi.one.sync;
import java.io.IOException;import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.KeeperException.NoNodeException;
import org.apache.zookeeper.KeeperException.NodeExistsException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
/**
* 同步创建节点
*
* @version 2016年6月24日上午8:41:34
* @author wuliu
*/
public class CreateNodeSync implements Watcher {
private static ZooKeeper zookeeper;
public static void main(String[] args) throws IOException, InterruptedException {
zookeeper = new ZooKeeper("127.0.0.1:2181",5000,new CreateNodeSync());
// zookeeper = new ZooKeeper("123.206.16.33:2181,123.206.16.33:2182,123.206.16.33:2183",5000,new CreateNodeSync());
// System.out.println(zookeeper.getState());
Thread.sleep(Integer.MAX_VALUE);
}
private void syncCreateNode(){
try {
String path = zookeeper.create("/syncCreateNode_01", "123456".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("创建的节点的路径是:"+path);
} catch (KeeperException e) {
if(e instanceof NodeExistsException){
System.out.println("创建的节点已经存在");
}else if(e instanceof NoNodeException){
System.out.println("父节点不存在");
}else{
e.printStackTrace();
}
} catch (InterruptedException e) {
System.out.println("InterruptedException:" + e.getMessage());
}
}
@Override
public void process(WatchedEvent event) {
// 事件状态为SyncConnected时,说明与服务端的连接已建立好
System.out.println("事件状态:" + event.getState() +",事件类型:" + event.getType() +",事件涉及路径:" + event.getPath());
if (event.getState() == KeeperState.SyncConnected){
if (event.getType() == EventType.None && null == event.getPath()){
syncCreateNode();
}
}else{
System.out.println("与服务器断开了链接");
}
}
}
2、配置设置一
package com.zk;
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;
public class SetConfig {
public static final String url = "127.0.0.1:2181";
private final static String root = "/myConf";
private final static String urlNode = root + "/url";
private final static String usernameNode = root + "/username";
private final static String passwordNode = root + "/password";
private final static String auth_type = "digest";
private final static String auth_passwd = "password";
private final static String urlStr = "jdbc:mysql://127.0.0.1:3306/wl";
private final static String usernameStr = "root";
private final static String passwordStr = "wl123456";
public static void main(String[] args) throws Exception {
ZooKeeper zk = new ZooKeeper(url, 3000, new Watcher() {
@Override
public void process(WatchedEvent event) {
System.out.println("事件类型:" + event.getType());
}
});
while(ZooKeeper.States.CONNECTED != zk.getState()){
Thread.sleep(3000);
}
//addauth digest password
//DigestAuthenticationProvider.generateDigest("jike:12346")
zk.addAuthInfo(auth_type, auth_passwd.getBytes());
if(zk.exists(root, true) == null){
zk.create(root, "root".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
}
if(zk.exists(urlNode, true) == null){
zk.create(urlNode, urlStr.getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
}
if(zk.exists(usernameNode, true) == null){
zk.create(usernameNode, usernameStr.getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
}
if(zk.exists(passwordNode, true) == null){
zk.create(passwordNode, passwordStr.getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
}
}
}
3、配置设置二
package com.zk;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
/**
* 读数据及监听数据变化
* @author Administrator
*
*/
// addauth digest password /myConf
public class SetConfig2 implements Watcher{
public static String url = "127.0.0.1:2181";
public static String root = "/myConf";
public static String authType = "digest";
public static String authPasswd = "password";
//数据库连接三个配置项
private final static String urlNode = root + "/url";
private final static String usernameNode = root + "/username";
private final static String passwordNode = root + "/password";
ZooKeeper zk = null;
private String urlStr;
private String usernameStr;
private String passwordStr;
public String getUrlStr() {
return urlStr;
}
public void setUrlStr(String urlStr) {
this.urlStr = urlStr;
}
public String getUsernameStr() {
return usernameStr;
}
public void setUsernameStr(String usernameStr) {
this.usernameStr = usernameStr;
}
public String getPasswordStr() {
return passwordStr;
}
public void setPasswordStr(String passwordStr) {
this.passwordStr = passwordStr;
}
public void initValue(){
try {
urlStr = new String(zk.getData(urlNode, true, null));
usernameStr = new String(zk.getData(usernameNode, true, null));
passwordStr = new String(zk.getData(passwordNode, true, null));
} catch (Exception e) {
e.printStackTrace();
}
}
public ZooKeeper getZK() throws Exception{
zk = new ZooKeeper(url,3000,this);
zk.addAuthInfo(authType, authPasswd.getBytes());
while(zk.getState() != ZooKeeper.States.CONNECTED){
Thread.sleep(3000);
}
System.out.println("连接服务器成功!");
return zk;
}
public static void main(String[] args) throws Exception{
SetConfig2 zkTest = new SetConfig2();
ZooKeeper zk = zkTest.getZK();
zkTest.initValue();
int i = 0;
while(true){
System.out.println(zkTest.getUrlStr());
System.out.println(zkTest.getUsernameStr());
System.out.println(zkTest.getPasswordStr());
Thread.sleep(10000);
i ++ ;
if(i == 10){
break;
}
}
zk.close();
}
@Override
public void process(WatchedEvent event) {
if(event.getType() == Watcher.Event.EventType.None){
System.out.println("Connect to the server");
}else if(event.getType() == Watcher.Event.EventType.NodeCreated){
System.out.println("节点创建成功!");
}else if(event.getType() == Watcher.Event.EventType.NodeChildrenChanged){
System.out.println("子节点更新成功!");
//读取新的配置
initValue();
}else if(event.getType() == Watcher.Event.EventType.NodeDataChanged){
System.out.println("节点更新成功!");
initValue();
}else if(event.getType() == Watcher.Event.EventType.NodeDeleted){
System.out.println("节点删除成功!");
}else{
System.out.println("------------" + event.getType());
}
}
}