diff --git a/sentinel-extension/sentinel-datasource-zookeeper/pom.xml b/sentinel-extension/sentinel-datasource-zookeeper/pom.xml
index fb2c6a7c..c6d46354 100644
--- a/sentinel-extension/sentinel-datasource-zookeeper/pom.xml
+++ b/sentinel-extension/sentinel-datasource-zookeeper/pom.xml
@@ -13,9 +13,7 @@
jar
- 3.4.14
- 4.0.1
- 2.12.0
+ 5.1.0
@@ -24,21 +22,10 @@
sentinel-datasource-extension
-
- org.apache.zookeeper
- zookeeper
- ${zookeeper.version}
-
org.apache.curator
curator-recipes
${curator.version}
-
-
- org.apache.zookeeper
- zookeeper
-
-
@@ -54,14 +41,8 @@
org.apache.curator
curator-test
- ${curator.test.version}
+ ${curator.version}
test
-
-
- org.apache.zookeeper
- zookeeper
-
-
com.alibaba
diff --git a/sentinel-extension/sentinel-datasource-zookeeper/src/main/java/com/alibaba/csp/sentinel/datasource/zookeeper/ZookeeperDataSource.java b/sentinel-extension/sentinel-datasource-zookeeper/src/main/java/com/alibaba/csp/sentinel/datasource/zookeeper/ZookeeperDataSource.java
index 5e7e95e8..dbc406d7 100644
--- a/sentinel-extension/sentinel-datasource-zookeeper/src/main/java/com/alibaba/csp/sentinel/datasource/zookeeper/ZookeeperDataSource.java
+++ b/sentinel-extension/sentinel-datasource-zookeeper/src/main/java/com/alibaba/csp/sentinel/datasource/zookeeper/ZookeeperDataSource.java
@@ -9,8 +9,8 @@ import org.apache.curator.framework.AuthInfo;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.cache.ChildData;
-import org.apache.curator.framework.recipes.cache.NodeCache;
-import org.apache.curator.framework.recipes.cache.NodeCacheListener;
+import org.apache.curator.framework.recipes.cache.CuratorCache;
+import org.apache.curator.framework.recipes.cache.CuratorCacheListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import java.util.Arrays;
@@ -40,11 +40,11 @@ public class ZookeeperDataSource extends AbstractDataSource {
new ArrayBlockingQueue(1), new NamedThreadFactory("sentinel-zookeeper-ds-update", true),
new ThreadPoolExecutor.DiscardOldestPolicy());
- private NodeCacheListener listener;
+ private CuratorCacheListener listener;
private final String path;
private CuratorFramework zkClient = null;
- private NodeCache nodeCache = null;
+ private CuratorCache nodeCache = null;
public ZookeeperDataSource(final String serverAddr, final String path, Converter parser) {
super(parser);
@@ -104,21 +104,17 @@ public class ZookeeperDataSource extends AbstractDataSource {
private void initZookeeperListener(final String serverAddr, final List authInfos) {
try {
- this.listener = new NodeCacheListener() {
- @Override
- public void nodeChanged() {
-
- try {
- T newValue = loadConfig();
- RecordLog.info("[ZookeeperDataSource] New property value received for ({}, {}): {}",
+ this.listener = CuratorCacheListener.builder().forNodeCache(() -> {
+ try {
+ T newValue = loadConfig();
+ RecordLog.info("[ZookeeperDataSource] New property value received for ({}, {}): {}",
serverAddr, path, newValue);
- // Update the new value to the property.
- getProperty().updateValue(newValue);
- } catch (Exception ex) {
- RecordLog.warn("[ZookeeperDataSource] loadConfig exception", ex);
- }
+ // Update the new value to the property.
+ getProperty().updateValue(newValue);
+ } catch (Exception ex) {
+ RecordLog.warn("[ZookeeperDataSource] loadConfig exception", ex);
}
- };
+ }).build();
String zkKey = getZkKey(serverAddr, authInfos);
if (zkClientMap.containsKey(zkKey)) {
@@ -148,8 +144,8 @@ public class ZookeeperDataSource extends AbstractDataSource {
}
}
- this.nodeCache = new NodeCache(this.zkClient, this.path);
- this.nodeCache.getListenable().addListener(this.listener, this.pool);
+ this.nodeCache = CuratorCache.build(this.zkClient, this.path);
+ this.nodeCache.listenable().addListener(this.listener, this.pool);
this.nodeCache.start();
} catch (Exception e) {
RecordLog.warn("[ZookeeperDataSource] Error occurred when initializing Zookeeper data source", e);
@@ -163,7 +159,7 @@ public class ZookeeperDataSource extends AbstractDataSource {
throw new IllegalStateException("Zookeeper has not been initialized or error occurred");
}
String configInfo = null;
- ChildData childData = nodeCache.getCurrentData();
+ ChildData childData = nodeCache.get(path).orElse(null);
if (null != childData && childData.getData() != null) {
configInfo = new String(childData.getData());
@@ -174,7 +170,7 @@ public class ZookeeperDataSource extends AbstractDataSource {
@Override
public void close() throws Exception {
if (this.nodeCache != null) {
- this.nodeCache.getListenable().removeListener(listener);
+ this.nodeCache.listenable().removeListener(listener);
this.nodeCache.close();
}
if (this.zkClient != null) {