fixes #10541, save subscribed dataIds for unsubscription. (#10573)

diff --git a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java
index 021102c..d2f749c 100644
--- a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java
+++ b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java
@@ -214,6 +214,7 @@
                 NacosInstanceManageUtil.setCorrespondingServiceNames(serviceName, serviceNames);
             }
         }
+
         doSubscribe(url, nacosAggregateListener, serviceNames);
     }
 
@@ -277,11 +278,18 @@
             shutdownServiceNamesLookup();
         } else {
             Map<NotifyListener, NacosAggregateListener> listenerMap = originToAggregateListener.get(url);
+            if (listenerMap == null) {
+                logger.warn(String.format("No aggregate listener found for url %s, this service might have already been unsubscribed.", url));
+                return;
+            }
             NacosAggregateListener nacosAggregateListener = listenerMap.remove(listener);
             if (nacosAggregateListener != null) {
-                Set<String> serviceNames = getServiceNames(url, nacosAggregateListener);
+                Set<String> serviceNames = nacosAggregateListener.getServiceNames();
                 try {
                     doUnsubscribe(url, nacosAggregateListener, serviceNames);
+                    for (String serviceName : serviceNames) {
+                        NacosInstanceManageUtil.removeCorrespondingServiceNames(serviceName);
+                    }
                 } catch (NacosException e) {
                     logger.error("Failed to unsubscribe " + url + " to nacos " + getUrl() + ", cause: " + e.getMessage(), e);
                 }
diff --git a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/util/NacosInstanceManageUtil.java b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/util/NacosInstanceManageUtil.java
index cb0179f..125f22a 100644
--- a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/util/NacosInstanceManageUtil.java
+++ b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/util/NacosInstanceManageUtil.java
@@ -52,6 +52,10 @@
         SERVICE_INSTANCE_LIST_MAP.put(serviceName, instanceList);
     }
 
+    public static Set<String> removeCorrespondingServiceNames(String serviceName) {
+        return CORRESPONDING_SERVICE_NAMES_MAP.remove(serviceName);
+    }
+
     public static List<Instance> getAllCorrespondingServiceInstanceList(String serviceName) {
         if (!CORRESPONDING_SERVICE_NAMES_MAP.containsKey(serviceName)) {
             return Lists.newArrayList();