作为初学者主要有以下原因:
1.Linux服务端防火墙开启的,拦截了连接请求,可以配置端口,或者关闭防火墙。
2.直接用主机名连接的,应现在Windows的host中配置映射。
我配置了端口,使用telnet也能联通端口,但是还是连接不起。经过查阅资料后发现:
连接操作是异步的(非阻塞连接),如果不做任何处理,可能导致还没连接成功,testConnect方法线程就已经关闭了。 这里使用递减锁来处理
代码如下:
@Test
public void testConnect() throws Exception {
//连接操作是异步的(非阻塞连接),如果不做任何处理,可能导致还没连接成功,testConnect方法线程就已经关闭了。
//这里使用递减锁来处理
final CountDownLatch cdl = new CountDownLatch(1);
//ip端口,连接超时时间,监听者
ZooKeeper zk = new ZooKeeper("10.10.10.176:2181", 3000, new Watcher() {
@Override
public void process(WatchedEvent event) {
if(event.getState() == KeeperState.SyncConnected) {
System.out.println("连接成功!");
cdl.countDown();
}
}
});
//递减锁没减到0则阻塞
cdl.await();
//获取数据
//参数:节点,监听者,节点的状态信息如时间戳等
byte[] byteDate = zk.getData("/user", null, null);
System.out.println(new String(byteDate));
//获取子节点
//参数:节点,监听者
List<String> list = zk.getChildren("/", null);
for(String str : list) {
System.out.println(str);
}
}