diff --git a/common/rpc_service.go b/common/rpc_service.go
index 05ca3721d98124ccbdebedb47b5ae4edd8b84add..f8b8e0761e86a3038d90e4cf457ac49df66bc92a 100644
--- a/common/rpc_service.go
+++ b/common/rpc_service.go
@@ -272,7 +272,7 @@ func (sm *serviceMap) UnRegister(interfaceName, protocol, serviceId string) erro
 		}
 	}
 	delete(svcs, serviceId)
-	if len(sm.serviceMap) == 0 {
+	if len(sm.serviceMap[protocol]) == 0 {
 		delete(sm.serviceMap, protocol)
 	}
 
diff --git a/remoting/zookeeper/listener.go b/remoting/zookeeper/listener.go
index 1ffea88a862552f1a45af0806a829902e63ed55e..948e0d73a579c82601eb759ea89953d1748bf55b 100644
--- a/remoting/zookeeper/listener.go
+++ b/remoting/zookeeper/listener.go
@@ -235,7 +235,7 @@ func (l *ZkEventListener) listenDirEvent(conf *common.URL, zkPath string, listen
 			// Only need to compare Path when subscribing to provider
 			if strings.LastIndex(zkPath, constant.PROVIDER_CATEGORY) != -1 {
 				provider, _ := common.NewURL(c)
-				if provider.Path != conf.Path {
+				if provider.ServiceKey() != conf.ServiceKey() {
 					continue
 				}
 			}