記錄一次Curator操作zookeeper的錯誤


在項目中使用到Apache Curator Framework連接Zookeeper 3.4.5服務器,使用的Curator Framework版本是4.3.0

 

<dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-recipes</artifactId>
      <version>4.3.0</version>
 </dependency>

 

在使用CuratorFrameworkFactory代碼,創建節點時報錯:

Callable<Void> task = new Callable<Void>() {
                        @Override
                        public Void call() throws Exception {
                            CuratorFramework client = CuratorFrameworkFactory.newClient(CONNECTION_STRING, new ExponentialBackoffRetry(1000, 3, Integer.MAX_VALUE));
                            try {
                                client.start();
                                ExampleClientThatLocks example = new ExampleClientThatLocks(client, PATH, resource, "Client " + index);
                                for (int j = 0; j < REPETITIONS; ++j) {
                                    example.doWork(10, TimeUnit.SECONDS);
                                }
                            } catch (InterruptedException e) {
                                Thread.currentThread().interrupt();
                            } catch (Exception e) {
                                e.printStackTrace();
                            } finally {
                                CloseableUtils.closeQuietly(client);
                            }
                            return null;
                        }
                    };

 

報錯內容如下:

org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for /examples/lock/_c_a37f597e-4699-4aba-87e8-fc2f63eda649-lock-
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:106)
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:54)
    at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:1637)
    at org.apache.curator.framework.imps.CreateBuilderImpl$17.call(CreateBuilderImpl.java:1180)
    at org.apache.curator.framework.imps.CreateBuilderImpl$17.call(CreateBuilderImpl.java:1156)
    at org.apache.curator.connection.StandardConnectionHandlingPolicy.callWithRetry(StandardConnectionHandlingPolicy.java:67)
    at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:81)
    at org.apache.curator.framework.imps.CreateBuilderImpl.pathInForeground(CreateBuilderImpl.java:1153)
    at org.apache.curator.framework.imps.CreateBuilderImpl.protectedPathInForeground(CreateBuilderImpl.java:607)
    at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:597)
    at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:575)
    at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:51)
    at org.apache.curator.framework.recipes.locks.StandardLockInternalsDriver.createsTheLock(StandardLockInternalsDriver.java:54)
    at org.apache.curator.framework.recipes.locks.LockInternals.attemptLock(LockInternals.java:225)
    at org.apache.curator.framework.recipes.locks.InterProcessMutex.internalLock(InterProcessMutex.java:237)
    at org.apache.curator.framework.recipes.locks.InterProcessMutex.acquire(InterProcessMutex.java:108)
    at com.example.demo.test.ExampleClientThatLocks.doWork(ExampleClientThatLocks.java:23)
    at com.example.demo.test.LockingExample$1.call(LockingExample.java:37)
    at com.example.demo.test.LockingExample$1.call(LockingExample.java:29)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

 

google了一下才知道,Curator Framework的2.x.x版本和3.x.x版本對Zookeeper支持的版本是有差異的,查看Curator Framework的官網(http://curator.apache.org),對於zookeeper 3.4.x服務器版本,只有Curator 2.x.x才支持,我使用的是Curator 4.3.0版本,不支持Zookeeper 3.4.5服務器,所以會拋出這個異常,將Curator中zk相關依賴去掉,並加入zk依賴。

 

解決方法:

<dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.3.0</version>
            <exclusions>
<!--去掉zk相關依賴-->
<exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.5</version> <exclusions>
<!--zk和別的依賴也有沖突,也去掉-->
<exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> <exclusion> <artifactId>netty</artifactId> <groupId>io.netty</groupId> </exclusion> <exclusion> <groupId>com.github.spotbugs</groupId> <artifactId>spotbugs-annotations</artifactId> </exclusion> <exclusion> <groupId>jline</groupId> <artifactId>jline</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> </exclusion> </exclusions> </dependency>

 

問題解決!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM