diff --git a/registry/zookeeper/registry.go b/registry/zookeeper/registry.go
index 678dace4a7817c708b93298f37494ef9678d966d..ee7154fba1f9fd28a9cd7a68f5f11296802fa0d9 100644
--- a/registry/zookeeper/registry.go
+++ b/registry/zookeeper/registry.go
@@ -422,14 +422,15 @@ func (r *zkRegistry) Subscribe(url *common.URL, notifyListener registry.NotifyLi
 			time.Sleep(time.Duration(RegistryConnDelay) * time.Second)
 			continue
 		}
-
+		n := 0
 		for {
+			n++
 			if serviceEvent, err := listener.Next(); err != nil {
 				logger.Warnf("Selector.watch() = error{%v}", perrors.WithStack(err))
-				if err.Error() == "listener stopped" {
+				if n == 1 {
+					listener.Close()
 					break
 				}
-				listener.Close()
 				break
 			} else {
 				logger.Infof("update begin, service event: %v", serviceEvent.String())
@@ -437,7 +438,8 @@ func (r *zkRegistry) Subscribe(url *common.URL, notifyListener registry.NotifyLi
 			}
 
 		}
-		time.Sleep(1e9)
+		logger.Infof("wait for get subscribe listener, key{%v}", url.Key())
+		sleepWait(n)
 	}
 }
 
@@ -492,3 +494,10 @@ func (r *zkRegistry) IsAvailable() bool {
 		return true
 	}
 }
+func sleepWait(n int) {
+	wait := time.Duration(200*n) * time.Millisecond
+	if wait > 3*time.Second {
+		wait = 3 * time.Second
+	}
+	time.Sleep(wait)
+}