zookeeper搭建以及Java连接zookeeper测试
一、zookeeper搭建1、下载zookeeperhttp://www.apache.org/dist/zookeeper/2、在Linux下面解压 3、配置zoo.cfg文件在conf目录下复制zoo_sample.cfg文件。然后配置zoo.cfg 4、至此单机模式已经配置好了。启
·
一、zookeeper搭建
1、下载zookeeper
2、在Linux下面解压
3、配置zoo.cfg文件
在conf目录下复制zoo_sample.cfg文件。然后配置zoo.cfg
4、至此单机模式已经配置好了。
启动:会查找zoo.cfg文件
bin/zkServer.sh stop 停止服务,restart重启服务。
测试链接
5、配置集群
client-port:供客户端连接服务的端口
server.x=ip:端口1:端口2
x:表示每个server的
myid文件中的值。
ip:每台服务器ip,如果是本地服务,对应ip可以配置为127.0.0.1。
端口1:是该服务器和集群中的Leader交换信息所用的端口
端口2:集群服务器选举Leader时所用
分别设置dataDir=/home/zookeeper/da
ta
dataDir=/etc/zookeeper/da
ta
在这两个目录下分别见myid文件,内容分别为1,2
启动:bin/zkServer.sh start | stop | restart
测试:
在第一台服务器上创建的节点,能连第二台服务器进行访问,则集群搭建成功。
多台电脑可通过虚拟机实现。
二、Java连接zookeeper测试
package lc.java.zookeeper;
imp
ort java.io.IOException;
imp
ort java.util.List;
imp
ort org.apache.zookeeper.AsyncCallback.StringCallback;
imp
ort org.apache.zookeeper.CreateMode;
imp
ort org.apache.zookeeper.KeeperException;
imp
ort org.apache.zookeeper.WatchedEvent;
imp
ort org.apache.zookeeper.Watcher;
imp
ort org.apache.zookeeper.Watcher.Event.EventType;
imp
ort org.apache.zookeeper.Watcher.Event.KeeperState;
imp
ort org.apache.zookeeper.ZooDefs.Ids;
imp
ort org.apache.zookeeper.ZooKeeper;
/**
*
* @author liuchong
*
*/
public class MyApp2 {
public static void main(String[] args) {
String connectString = "192.168.127.220:2181";
int sessionTimeout = 500000; // 会话时间。设置长一点,如果不够长,则会connect loss
try {
// 建立zookeeper链接
ZooKeeper zk = new ZooKeeper(connectString, sessionTimeout, new Watcher(){
public void process(WatchedEvent event) {
// 监控所有触发的事件
System.out.println("start do something");
EventType type = event.getType(); // 事件类型。枚举
KeeperState state = event.getState(); // 状态。 枚举
// type.getIntValue();
switch (type) {
case None: // int值对应 -1
System.out.println("none 事件触发");
break;
case NodeCreated: // int值对应 1
System.out.println("创建节点事件发生了");
break;
case NodeDeleted: // int值对应 2
System.out.println("删除节点事件发生了");
break;
case NodeDataChanged: // int值对应 3
System.out.println("节点数据改变事件发生了");
break;
case NodeChildrenChanged: // int值对应 4
System.out.println("子节点改变事件发生了");
break;
default:
System.out.println("I do not know what operate you do");
break;
}
// state.getIntValue(); NoSyncConnected 1和Unknown-1
switch (state) {
case Disconnected: // 0
System.out.println("失去连接");
break;
case SyncConnected: // 3
System.out.println("异步链接");
break;
case Expired: // -112
System.out.println("超时过期");
break;
default:
break;
}
System.out.println("end");
}
});
List<String> list = zk.getChildren("/", true); // 获取所有节点
if(list != null) {
for(String s : list)
System.out.println(s);
}
// 在/app5节点下创建child节点
zk.create("/app5/child", "/app5的子节点数据".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); // 会对数据持久化,服务下次启动任然存在
zk.create("/app6/child", "/app6的子节点数据".getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT, new StringCallback(){
@Override
public void processResult(int rc, String path, Object ctx, String name) {
System.out.println("rc: " + rc);
System.out.println("path: " + path);
System.out.println("Object:" + ctx);
System.out.println("name: " + name);
}
}, "ctx object");
} catch (IOException e) {
e.printStackTrace();
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}运行结果:
如果节点存在了,再创建一样的节点,则会报错。
更多推荐
已为社区贡献1条内容
所有评论(0)