diff --git a/registry/etcdv3/listener.go b/registry/etcdv3/listener.go
index 61c71ee48e529b36b094d5c2532b15471515fcff..da6a46b15cf76231a3921c13d4f0bb8d94c13538 100644
--- a/registry/etcdv3/listener.go
+++ b/registry/etcdv3/listener.go
@@ -34,20 +34,17 @@ import (
 )
 
 type dataListener struct {
-	interestedURL map[string]*common.URL
+	interestedURL []*common.URL
 	listener      config_center.ConfigurationListener
 }
 
 // NewRegistryDataListener ...
 func NewRegistryDataListener(listener config_center.ConfigurationListener) *dataListener {
-	return &dataListener{listener: listener, interestedURL: make(map[string]*common.URL, 16)}
+	return &dataListener{listener: listener, interestedURL: make([]*common.URL, 16)}
 }
 
 func (l *dataListener) AddInterestedURL(url *common.URL) {
-	if _, ok := l.interestedURL[url.String()]; ok {
-		return
-	}
-	l.interestedURL[url.String()] = url
+	l.interestedURL = append(l.interestedURL, url)
 }
 
 func (l *dataListener) DataChange(eventType remoting.Event) bool {
@@ -59,18 +56,19 @@ func (l *dataListener) DataChange(eventType remoting.Event) bool {
 		return false
 	}
 
-	if _, ok := l.interestedURL[serviceURL.String()]; !ok {
-		return false
+	for _, v := range l.interestedURL {
+		if serviceURL.URLEqual(*v) {
+			l.listener.Process(
+				&config_center.ConfigChangeEvent{
+					Key:        eventType.Path,
+					Value:      serviceURL,
+					ConfigType: eventType.Action,
+				},
+			)
+			return true
+		}
 	}
-
-	l.listener.Process(
-		&config_center.ConfigChangeEvent{
-			Key:        eventType.Path,
-			Value:      serviceURL,
-			ConfigType: eventType.Action,
-		},
-	)
-	return true
+	return false
 }
 
 type configurationListener struct {
diff --git a/registry/kubernetes/listener.go b/registry/kubernetes/listener.go
index d9164e714311d098f7312485caad87105a357d8d..b1593e6fc83b01acee2b5f6fe71d1781f78986b5 100644
--- a/registry/kubernetes/listener.go
+++ b/registry/kubernetes/listener.go
@@ -34,23 +34,19 @@ import (
 )
 
 type dataListener struct {
-	interestedURL map[string]*common.URL
+	interestedURL []*common.URL
 	listener      config_center.ConfigurationListener
 }
 
 // NewRegistryDataListener
 // new the data  listener, the interest url default len 16
 func NewRegistryDataListener(listener config_center.ConfigurationListener) *dataListener {
-	return &dataListener{listener: listener, interestedURL: make(map[string]*common.URL, 16)}
+	return &dataListener{listener: listener, interestedURL: make([]*common.URL, 16)}
 }
 
 // AddInterestedURL
 func (l *dataListener) AddInterestedURL(url *common.URL) {
-
-	if _, ok := l.interestedURL[url.String()]; ok {
-		return
-	}
-	l.interestedURL[url.String()] = url
+	l.interestedURL = append(l.interestedURL, url)
 }
 
 // DataChange
@@ -65,9 +61,7 @@ func (l *dataListener) DataChange(eventType remoting.Event) bool {
 	}
 
 	for _, v := range l.interestedURL {
-
 		if serviceURL.URLEqual(*v) {
-
 			l.listener.Process(
 				&config_center.ConfigChangeEvent{
 					Key:        eventType.Path,
diff --git a/registry/zookeeper/listener.go b/registry/zookeeper/listener.go
index 0c46261b39471e2794e3508b65cc5b28b10e80dc..6b7f7aa0e3e0d0c8a24a41d715d4ded28885412b 100644
--- a/registry/zookeeper/listener.go
+++ b/registry/zookeeper/listener.go
@@ -37,21 +37,18 @@ import (
 
 // RegistryDataListener ...
 type RegistryDataListener struct {
-	interestedURL map[string]*common.URL
+	interestedURL []*common.URL
 	listener      config_center.ConfigurationListener
 }
 
 // NewRegistryDataListener ...
 func NewRegistryDataListener(listener config_center.ConfigurationListener) *RegistryDataListener {
-	return &RegistryDataListener{listener: listener, interestedURL: make(map[string]*common.URL, 16)}
+	return &RegistryDataListener{listener: listener, interestedURL: make([]*common.URL, 16)}
 }
 
 // AddInterestedURL ...
 func (l *RegistryDataListener) AddInterestedURL(url *common.URL) {
-	if _, ok := l.interestedURL[url.String()]; ok {
-		return
-	}
-	l.interestedURL[url.String()] = url
+	l.interestedURL = append(l.interestedURL, url)
 }
 
 // DataChange ...
@@ -69,18 +66,19 @@ func (l *RegistryDataListener) DataChange(eventType remoting.Event) bool {
 		return false
 	}
 
-	if _, ok := l.interestedURL[serviceURL.String()]; !ok {
-		return false
+	for _, v := range l.interestedURL {
+		if serviceURL.URLEqual(*v) {
+			l.listener.Process(
+				&config_center.ConfigChangeEvent{
+					Key:        eventType.Path,
+					Value:      serviceURL,
+					ConfigType: eventType.Action,
+				},
+			)
+			return true
+		}
 	}
-
-	l.listener.Process(
-		&config_center.ConfigChangeEvent{
-			Key:        eventType.Path,
-			Value:      serviceURL,
-			ConfigType: eventType.Action,
-		},
-	)
-	return true
+	return false
 }
 
 // RegistryConfigurationListener ...