加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Error :KeeperErrorCode = ConnectionLoss for

(2016-04-07 16:32:32)
【问题描述】
zkui报错
2016-04-07 16:30:27 ERROR Home:103 - [org.apache.zookeeper.KeeperException.create(KeeperException.java:99), org.apache.zookeeper.KeeperException.create(KeeperException.java:51), org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1468), org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1496), com.deem.zkui.utils.ZooKeeperUtil.listNodeEntries(ZooKeeperUtil.java:255), com.deem.zkui.controller.Home.doGet(Home.java:71), javax.servlet.http.HttpServlet.service(HttpServlet.java:687), javax.servlet.http.HttpServlet.service(HttpServlet.java:790), org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:698), org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1564), com.deem.zkui.filter.AuthFilter.doFilter(AuthFilter.java:63), org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1544), org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:524), org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:138), org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:568), org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221), org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1105), org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:453), org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183), org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1039), org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136), org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52), org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97), org.eclipse.jetty.server.Server.handle(Server.java:445), org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:277), org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:216), org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505), org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601), org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532), java.lang.Thread.run(Thread.java:722)]
2016-04-07 16:30:27 ERROR ServletUtil:75 - Error :KeeperErrorCode = ConnectionLoss for /
【分析】
原因是:new zookeeper之后,zookeeper的还没有连接好,就去调用,当然会抛错。

继续查找资料,比较优雅的解决方案为如下:

 

waitUntilConnected(zooKeeper);

 

public static void waitUntilConnected(ZooKeeper zooKeeper) {

        CountDownLatch connectedLatch = new CountDownLatch(1);

        Watcher watcher = new ConnectedWatcher(connectedLatch);

        zooKeeper.register(watcher);

        if (States.CONNECTING == zooKeeper.getState()) {

            try {

                connectedLatch.await();

            } catch (InterruptedException e) {

                throw new IllegalStateException(e);

            }

        }

    }

 

    static class ConnectedWatcher implements Watcher {

 

        private CountDownLatch connectedLatch;

 

        ConnectedWatcher(CountDownLatch connectedLatch) {

            this.connectedLatch = connectedLatch;

        }

 

        @Override

        public void process(WatchedEvent event) {

            if (event.getState() == KeeperState.SyncConnected) {

                connectedLatch.countDown();

            }

        }

    }


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有