【问题标题】:android use zk client with curator to connect zk get data failed with connectionLossandroid 使用 zk 客户端和 curator 连接 zk 获取数据因 connectionLoss 失败
【发布时间】:2019-12-22 09:36:54
【问题描述】:

zk 客户端:android 使用 curator 4.2

zk 服务器:zk 版本 3.5.6

问题:当我连接 zk 以从“/”获取数据时失败

org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /

                class MyThread implements Runnable {
                    @Override
                    public void run() {
                        try {
                            String ip = "192.168.0.111";
                            System.out.println("start new");
                            ExponentialBackoffRetry retry = new ExponentialBackoffRetry(10000, 3);
                            System.out.println("end new");
                            CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient(ip, retry );
                            System.out.println("end new2");

                            curatorFramework.start();

                            Stat nodeStat = new Stat();
                            byte[] nodeInfo = curatorFramework.getData()
                                    .storingStatIn(nodeStat)
                                    .forPath("/");
                            System.out.println("===node info is:" + new String(nodeInfo));

                            curatorFramework.create().creatingParentContainersIfNeeded()
                                    .withMode(CreateMode.PERSISTENT)
                                    .withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE)
                                    .forPath("/nodeTest", "testData".getBytes());
                            System.out.println("wtf");
                            button1.setText("nihaoya");
                        } catch (Exception e) {
                            System.out.println( e.toString());
                        }
                    }
                }

【问题讨论】:

    标签: java android apache-zookeeper apache-curator


    【解决方案1】:

    ZooKeeper 中的连接字符串不仅仅是 IP 地址。您还必须包括客户端端口(通常为 2181)。此外,您应该在整体中包含所有服务器(我假设您有 3 个)。所以,一个常见的连接字符串是111.111.111.111:2181,222.222.222.222:2181,333.333.333.333:2181(当然,使用你的IP地址)。

    【讨论】:

    • 哦,不行,zk服务器是在ubuntu 18.04的虚拟机上运行的。 android机器是android studio的虚拟设备。当我停止 zk 服务器时,应用程序错误响应是相同的。看起来 zk 服务器没有运行。但让我困惑的是,当我启动另一个虚拟机并启动一个使用 golang 依赖的 zk 客户端时,它可以连接到 zk 服务器并正常工作
    【解决方案2】:

    我修复了它,只需关闭使用 System.setProperties(ZooKeeperSaslClient.ENABLE_CLIENT_SASL_KEY, "false");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 2022-12-17
      相关资源
      最近更新 更多