用户登录
用户注册

分享至

java连接zookeeper

  • 作者: 切丶GG
  • 来源: 51数据库
  • 2020-09-30
常见错误日志如下:
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss

1. 原因:
是因为ZooKeeper建立连接时采用异步操作,连接操作后并不能保证ZK连接已成功。如果在ZK连接成功前的这个小时间窗口去访问ZK,就会碰到如上错误。
2. 解决思路
我们在新建ZK连接后要等一段时间,保证连接成功后再访问ZK。

3. 网上比较赞同的解决方案:
主要利用两个Java类:

(1)java.util.concurrent.CountDownLatch:
一个同步辅助类,类似倒数计数,直到计数器为0时才能对资源“解锁”。未解锁前等待该资源的进程只能被阻塞。

主要方法:
public CountDownLatch(int count); /* 构造函数,参数指定计数次数 */
public void countDown(); /* 当前线程调用此函数,则计数减一 */
public void await() throws InterruptedException; /* 此函数会一直阻塞当前线程,直到计时器的值为0为止 */

(2)org.apache.zookeeper.Watcher
ZooKeeper有一个很有用的功能,就是集群上每一个变化都可以通知到自定义的Watchcer。



  因为你这样就只能监听一次连接。数据接收完也就断开了。你试试把服务器端做成一个线程,不听的监听连接。
import java.net.*;
import java.io.*;
public class server1 implements runnable
{
public static void main(string args[])
{
}
public void run()
{
while(true)
{

try
{
serversocket sc=new serversocket(80);
socket s=sc.accept();
datainputstream di=new datainputstream(s.getinputstream());
system.out.println(di.readint());
}
catch(exception e){e.printstacktrace();}

}
}
}
软件
前端设计
程序设计
Java相关