diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java index a06537b432c..e52a24ec01f 100644 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java +++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java @@ -30,6 +30,7 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY; @@ -61,7 +62,12 @@ public class ZookeeperDynamicConfiguration implements DynamicConfiguration { zkClient.addDataListener(rootPath, cacheListener, executor); try { // Wait for connection - this.initializedLatch.await(); + long timeout = url.getParameter("init.timeout", 5000); + boolean isCountDown = this.initializedLatch.await(timeout, TimeUnit.MILLISECONDS); + if (!isCountDown) { + throw new IllegalStateException("Failed to receive INITIALIZED event from zookeeper, pls. check if url " + + url + " is correct"); + } } catch (InterruptedException e) { logger.warn("Failed to build local cache for config center (zookeeper)." + url); } diff --git a/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperClient.java b/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperClient.java index b14cd11b83f..b20f4ae4f79 100644 --- a/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperClient.java +++ b/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperClient.java @@ -227,12 +227,14 @@ protected void addTargetDataListener(String path, CuratorZookeeperClient.Curator try { TreeCache treeCache = TreeCache.newBuilder(client, path).setCacheData(false).build(); treeCacheMap.putIfAbsent(path, treeCache); - treeCache.start(); + if (executor == null) { treeCache.getListenable().addListener(treeCacheListener); } else { treeCache.getListenable().addListener(treeCacheListener, executor); } + + treeCache.start(); } catch (Exception e) { throw new IllegalStateException("Add treeCache listener for path:" + path, e); }