- [*] I have searched the [issues](https://github.com/apache/dubbo/issues) of this repository and believe that this is not a duplicate.
- [*] I have checked the [FAQ](https://github.com/apache/dubbo/blob/master/FAQ.md) of this repository and believe that this is not a duplicate.

### Environment

* Dubbo version: 2.7.10
* Operating System version: CentOS 7
* Java version: 1.8.0

### Expected Result

Consumer using Zookeeper registry can get provider instance list updated whenever a provider instance is registered or deregistered.

### Actual Result

Provider instance list is never updated when first call to doSubscribe failed with an exception.

thread dump below shows that zookeeper event thread is forever waiting on a `CountDownLatch`.

```
"main-EventThread" #109 daemon prio=5 os_prio=0 tid=0x00007f5d67934800 nid=0x95 waiting on condition [0x00007f5b41c5e000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000005c73a9390> (a java.util.concurrent.CountDownLatch$Sync)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
	at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
	at org.apache.dubbo.registry.zookeeper.ZookeeperRegistry$RegistryChildListenerImpl.childChanged(ZookeeperRegistry.java:338)
	at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient$CuratorWatcherImpl.process(CuratorZookeeperClient.java:294)
	at org.apache.curator.framework.imps.NamespaceWatcher.process(NamespaceWatcher.java:83)
	at org.apache.zookeeper.ClientCnxn$EventThread.processEvent(ClientCnxn.java:531)
	at org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:506)
```
The CountDownLatch is used in `ZookeeperRegistry#doSubscribe()`, which may not be `countDown` if an exception is thrown, like below

```
...
Caused by: org.apache.dubbo.rpc.RpcException: Failed to subscribe consumer://172.17.0.5/..., cause: null
	at org.apache.dubbo.registry.zookeeper.ZookeeperRegistry.doSubscribe(ZookeeperRegistry.java:186) ~[dubbo-2.7.10.jar!/:2.7.10]
	at org.apache.dubbo.registry.support.FailbackRegistry.subscribe(FailbackRegistry.java:299) ~[dubbo-2.7.10.jar!/:2.7.10]
	... 33 more
Caused by: java.lang.IllegalStateException
	at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.addTargetChildListener(CuratorZookeeperClient.java:215) ~[dubbo-2.7.10.jar!/:2.7.10]
	at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.addTargetChildListener(CuratorZookeeperClient.java:53) ~[dubbo-2.7.10.jar!/:2.7.10]
	at org.apache.dubbo.remoting.zookeeper.support.AbstractZookeeperClient.addChildListener(AbstractZookeeperClient.java:112) ~[dubbo-2.7.10.jar!/:2.7.10]
	at org.apache.dubbo.registry.zookeeper.ZookeeperRegistry.doSubscribe(ZookeeperRegistry.java:176) ~[dubbo-2.7.10.jar!/:2.7.10]
	at org.apache.dubbo.registry.support.FailbackRegistry.subscribe(FailbackRegistry.java:299) ~[dubbo-2.7.10.jar!/:2.7.10]
	... 33 more
Caused by: java.lang.InterruptedException
	at java.lang.Object.wait(Native Method) ~[?:1.8.0_111]
	at java.lang.Object.wait(Object.java:502) ~[?:1.8.0_111]
	at org.apache.zookeeper.ClientCnxn.submitRequest(ClientCnxn.java:1409) ~[zookeeper-3.4.11.jar!/:3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0]
	at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1651) ~[zookeeper-3.4.11.jar!/:3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0]
	at org.apache.curator.framework.imps.GetChildrenBuilderImpl$3.call(GetChildrenBuilderImpl.java:242) ~[curator-framework-4.0.1.jar!/:4.0.1]
	at org.apache.curator.framework.imps.GetChildrenBuilderImpl$3.call(GetChildrenBuilderImpl.java:231) ~[curator-framework-4.0.1.jar!/:4.0.1]
	at org.apache.curator.connection.StandardConnectionHandlingPolicy.callWithRetry(StandardConnectionHandlingPolicy.java:64) ~[curator-client-4.0.1.jar!/:?]
	at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:100) ~[curator-client-4.0.1.jar!/:?]
	at org.apache.curator.framework.imps.GetChildrenBuilderImpl.pathInForeground(GetChildrenBuilderImpl.java:228) ~[curator-framework-4.0.1.jar!/:4.0.1]
	at org.apache.curator.framework.imps.GetChildrenBuilderImpl.forPath(GetChildrenBuilderImpl.java:219) ~[curator-framework-4.0.1.jar!/:4.0.1]
	at org.apache.curator.framework.imps.GetChildrenBuilderImpl.forPath(GetChildrenBuilderImpl.java:41) ~[curator-framework-4.0.1.jar!/:4.0.1]
	at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.addTargetChildListener(CuratorZookeeperClient.java:211) ~[dubbo-2.7.10.jar!/:2.7.10]
	at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.addTargetChildListener(CuratorZookeeperClient.java:53) ~[dubbo-2.7.10.jar!/:2.7.10]
	at org.apache.dubbo.remoting.zookeeper.support.AbstractZookeeperClient.addChildListener(AbstractZookeeperClient.java:112) ~[dubbo-2.7.10.jar!/:2.7.10]
	at org.apache.dubbo.registry.zookeeper.ZookeeperRegistry.doSubscribe(ZookeeperRegistry.java:176) ~[dubbo-2.7.10.jar!/:2.7.10]
	at org.apache.dubbo.registry.support.FailbackRegistry.subscribe(FailbackRegistry.java:299) ~[dubbo-2.7.10.jar!/:2.7.10]
	... 33 more
```

public void doRegister(URL url) {
        try {
            zkClient.create(toUrlPath(url), url.getParameter(DYNAMIC_KEY, true));
        } catch (Throwable e) {
            throw new RpcException("Failed to register " + url + " to zookeeper " + getUrl() + ", cause: " + e.getMessage(), e);
        }
    }
    @Override
    public void doUnregister(URL url) {
        try {
            zkClient.delete(toUrlPath(url));
        } catch (Throwable e) {
            throw new RpcException("Failed to unregister " + url + " to zookeeper " + getUrl() + ", cause: " + e.getMessage(), e);
        }
    }
    @Override
    public void doSubscribe(final URL url, final NotifyListener listener) {
        try {
            if (ANY_VALUE.equals(url.getServiceInterface())) {
                String root = toRootPath();
                ConcurrentMap<NotifyListener, ChildListener> listeners = zkListeners.computeIfAbsent(url, k -> new ConcurrentHashMap<>());
                ChildListener zkListener = listeners.computeIfAbsent(listener, k -> (parentPath, currentChilds) -> {
                    for (String child : currentChilds) {
                        child = URL.decode(child);
                        if (!anyServices.contains(child)) {
                            anyServices.add(child);
                            subscribe(url.setPath(child).addParameters(INTERFACE_KEY, child,
                                Constants.CHECK_KEY, String.valueOf(false)), k);
                        }
                    }