一、curator-framework 簡介
curator-framework 是對zookeeper做的分二次分布式封裝處理,目前代碼也是apache 開源社區維護,如下所示。
github地址:https://github.com/apache/curator
curator-framework 中包含了基於zookeeper的分布式鎖的實現、服務discovery、leader選舉、基於zk的緩存實現等。在curator-framework 提供了示例代碼,如下所示:
二、curator-framework 使用中的問題
1、curator-framework 在使用分布式鎖時遇到的問題:
一開始使用的是2.13.0的版本,maven中引入的方式如下:
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.13.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.13.0</version> </dependency>
使用時,客戶端連接zk和啟動都正常沒有任何的問題,在切換到最新的4.3.0的版本后出現連接報錯問題
<dependency> <groupId>org.apache.curator</groupId> <artifactId>4.3.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.3.0</version> </dependency>
着實郁悶了很久,使用pom分析看了一下依賴的關系,發現因為4.3.0 依賴的zk jar包版本和服務端的zk服務版本不一致,然后懷疑是 客戶端和服務端版本不一致導致的,那么嘗試修改maven中zk的jar包的依賴版本。
本文作者:張永清 轉載請注明博客園:https://www.cnblogs.com/laoqing/p/12768298.html
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.3.0</version> <exclusions> <exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.3.0</version> <exclusions> <exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> </dependency>
首先排除apache.curator中的依賴的zk jar,然后重新引入和服務端版本一致的3.4.14版本的zk jar。
客戶端重新啟動連接后,發現正常了,由此發現客戶端和服務端版本一致,是可能會引發這個問題。
另外如果zk的服務端配置的zoo.cfg配置的為主機名,那么客戶端zk在連接時也需要用主機名去連接,在使用ip去連接時,也有可能會出現同樣的問題。