尝试创建zNode时Apache Curator未实现的错误

Dav*_*day 18 apache apache-zookeeper apache-curator

我正在尝试将Apache Curator与dockerized zookeeper实例一起使用,无论我如何尝试连接,我总是最终得到一个

org.apache.zookeeper.KeeperException $ UnimplementedException:KeeperErrorCode =未实现...

错误.我已经尝试了解文档,但我没有到达任何地方.我已登录zookeeper CLI并确保端口号正确:

snerd@powerglove:~$ docker ps CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS   NAMES 31f1093495ba        compose_zookeeper   "/opt/zookeeper/bin/   3 weeks ago         Up About a minute   0.0.0.0:32770->2181/tcp,
0.0.0.0:32769->2888/tcp, 0.0.0.0:32768->3888/tcp   zookeeper
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试使用的代码:

public class App {
    public static void main( String[] args ) {
        CuratorFramework client = CuratorFrameworkFactory.newClient("0.0.0.0:32770", new RetryUntilElapsed(3000, 1000));
        client.start();

            try {
                client.create().forPath("/larry-smells/foop", "tuna?".getBytes());
            } catch (Exception e) {
                System.out.println(e.toString());
            }

    }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,从策展人入门页面来看,这应该可行.我错过了什么?

edit1 刚才发现我能够将数据从动物园管理员集合中拉出来:

System.out.println(new String(curatorFramework.getData().forPath("/larry-smells"))); 
Run Code Online (Sandbox Code Playgroud)

但是create命令仍然在爆炸.

EDIT2

错误的堆栈跟踪:

org.apache.zookeeper.KeeperException $ UnimplementedException:KeeperErrorCode = org.apache.zookeeper.KeeperException.create中的/ larry-smells/foop org.apache.zookeeper.KeeperException.create(KeeperException.java:103)未实现(KeeperException. java:51)org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:1297)位于org.apache.curator的org.apache.curator.framework.imps.CreateBuilderImpl $ 17.call(CreateBuilderImpl.java:1040). framework.imps.CreateBuilderImpl $ 17.call(CreateBuilderImpl.java:1023)atg.apache.curator.connection.StandardConnectionHandlingPolicy.callWithRetry(StandardConnectionHandlingPolicy.java:67)at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:99 )org.apache.curator.imps.CreateBuilderImpl.pathInForeground(CreateBuilderImpl.java:1020)位于org.apache.curator的org.apache.curator.framework.imps.CreateBuilderImpl.protectedPathInForeground(CreateBuilderImpl.java:501). framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:491)at或 g.apache.curator.framework.imps.CreateBuilderImpl $ 4.forPath(CreateBuilderImpl.java:367)位于com.mycompany.app的org.apache.curator.framework.imps.CreateBuilderImpl $ 4.forPath(CreateBuilderImpl.java:309). App.main(App.java:35)

小智 42


编辑:显然,如果您使用Curator与Zookeeper的错误组合,则会发生此错误.来自curator.apache.org:

策展人2.xx - 兼容ZooKeeper 3.4.x和ZooKeeper 3.5.x.

策展人3.xx - 仅与ZooKeeper 3.5.x兼容,并支持动态重新配置等新功能.


仅使用错误代码而不是堆栈跟踪很难确定您的问题,但我建议您使应用程序更稳定的一些改进是:

public class App {
    public static void main( String[] args ) {
        CuratorFramework client = CuratorFrameworkFactory.newClient("0.0.0.0:32770", new RetryUntilElapsed(3000, 1000));
        client.start();

        try {
            //make sure you're connected to zookeeper.
            client.blockUntilConnected();

            //Make sure the parents are created.
            client.create().creatingParentsIfNeeded().forPath("/larry-smells/foop", "tuna?".getBytes());
        } catch (Exception e) {
            System.out.println(e.toString());
            }

    }
}
Run Code Online (Sandbox Code Playgroud)