diff --git a/registry/zookeeper/registry.go b/registry/zookeeper/registry.go
index 29ae51d44f3691807cbc74912290ba141d1f5d47..678dace4a7817c708b93298f37494ef9678d966d 100644
--- a/registry/zookeeper/registry.go
+++ b/registry/zookeeper/registry.go
@@ -200,6 +200,10 @@ func (r *zkRegistry) RestartCallBack() bool {
 		}
 		logger.Infof("success to re-register service :%v", confIf.Key())
 	}
+	r.listener = zookeeper.NewZkEventListener(r.client)
+	r.configListener = NewRegistryConfigurationListener(r.client, r)
+	r.dataListener = NewRegistryDataListener(r.configListener)
+
 	return flag
 }
 
@@ -422,15 +426,18 @@ func (r *zkRegistry) Subscribe(url *common.URL, notifyListener registry.NotifyLi
 		for {
 			if serviceEvent, err := listener.Next(); err != nil {
 				logger.Warnf("Selector.watch() = error{%v}", perrors.WithStack(err))
+				if err.Error() == "listener stopped" {
+					break
+				}
 				listener.Close()
-				return
+				break
 			} else {
 				logger.Infof("update begin, service event: %v", serviceEvent.String())
 				notifyListener.Notify(serviceEvent)
 			}
 
 		}
-
+		time.Sleep(1e9)
 	}
 }