diff --git a/registry/zookeeper/registry.go b/registry/zookeeper/registry.go
index ee7154fba1f9fd28a9cd7a68f5f11296802fa0d9..31f1dc3a82a3a19d86fc58b353fad34c978d502e 100644
--- a/registry/zookeeper/registry.go
+++ b/registry/zookeeper/registry.go
@@ -406,7 +406,9 @@ func (r *zkRegistry) subscribe(conf *common.URL) (registry.Listener, error) {
 
 //subscribe from registry
 func (r *zkRegistry) Subscribe(url *common.URL, notifyListener registry.NotifyListener) {
+	n := 0
 	for {
+		n++
 		if !r.IsAvailable() {
 			logger.Warnf("event listener game over.")
 			return
@@ -422,12 +424,10 @@ func (r *zkRegistry) Subscribe(url *common.URL, notifyListener registry.NotifyLi
 			time.Sleep(time.Duration(RegistryConnDelay) * time.Second)
 			continue
 		}
-		n := 0
-		for {
-			n++
+		for i := 0; ; i++ {
 			if serviceEvent, err := listener.Next(); err != nil {
 				logger.Warnf("Selector.watch() = error{%v}", perrors.WithStack(err))
-				if n == 1 {
+				if i == 0 {
 					listener.Close()
 					break
 				}