#591 add namespace for nacos (#638)

fix #591, #628
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
index 0f1c803..f4bbc6e 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
@@ -28,6 +28,7 @@
     public static final String DEFAULT_ROOT = "dubbo";
     public static final String PATH_SEPARATOR = "/";
     public static final String GROUP_KEY = "group";
+    public static final String NAMESPACE_KEY = "namespace";
     public static final String CONFIG_KEY = "config" + PATH_SEPARATOR + "dubbo";
     public static final String DUBBO_PROPERTY = "dubbo.properties";
     public static final String PROVIDER_SIDE = "provider";
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
index b0d3379..2bc6fee 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
@@ -65,6 +65,15 @@
     @Value("${admin.metadata-report.group:dubbo}")
     private String metadataGroup;
 
+    @Value("${admin.registry.namespace:dubbo}")
+    private String registryNameSpace;
+
+    @Value("${admin.config-center.namespace:dubbo}")
+    private String configCenterGroupNameSpace;
+
+    @Value("${admin.metadata-report.namespace:dubbo}")
+    private String metadataGroupNameSpace;
+
     @Value("${admin.config-center.username:}")
     private String username;
     @Value("${admin.config-center.password:}")
@@ -86,7 +95,7 @@
         GovernanceConfiguration dynamicConfiguration = null;
 
         if (StringUtils.isNotEmpty(configCenter)) {
-            configCenterUrl = formUrl(configCenter, configCenterGroup, username, password);
+            configCenterUrl = formUrl(configCenter, configCenterGroup, configCenterGroupNameSpace, username, password);
             dynamicConfiguration = ExtensionLoader.getExtensionLoader(GovernanceConfiguration.class).getExtension(configCenterUrl.getProtocol());
             dynamicConfiguration.setUrl(configCenterUrl);
             dynamicConfiguration.init();
@@ -96,16 +105,16 @@
                 Arrays.stream(config.split("\n")).forEach( s -> {
                     if(s.startsWith(Constants.REGISTRY_ADDRESS)) {
                         String registryAddress = s.split("=")[1].trim();
-                        registryUrl = formUrl(registryAddress, configCenterGroup, username, password);
+                        registryUrl = formUrl(registryAddress, configCenterGroup, registryNameSpace, username, password);
                     } else if (s.startsWith(Constants.METADATA_ADDRESS)) {
-                        metadataUrl = formUrl(s.split("=")[1].trim(), configCenterGroup, username, password);
+                        metadataUrl = formUrl(s.split("=")[1].trim(), configCenterGroup, metadataGroupNameSpace, username, password);
                     }
                 });
             }
         }
         if (dynamicConfiguration == null) {
             if (StringUtils.isNotEmpty(registryAddress)) {
-                registryUrl = formUrl(registryAddress, registryGroup, username, password);
+                registryUrl = formUrl(registryAddress, registryGroup, registryNameSpace, username, password);
                 dynamicConfiguration = ExtensionLoader.getExtensionLoader(GovernanceConfiguration.class).getExtension(registryUrl.getProtocol());
                 dynamicConfiguration.setUrl(registryUrl);
                 dynamicConfiguration.init();
@@ -129,7 +138,7 @@
             if (StringUtils.isBlank(registryAddress)) {
                 throw new ConfigurationException("Either config center or registry address is needed, please refer to https://github.com/apache/incubator-dubbo-admin/wiki/Dubbo-Admin-configuration");
             }
-            registryUrl = formUrl(registryAddress, registryGroup, username, password);
+            registryUrl = formUrl(registryAddress, registryGroup, registryNameSpace, username, password);
         }
         RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
         registry = registryFactory.getRegistry(registryUrl);
@@ -145,7 +154,7 @@
         MetaDataCollector metaDataCollector = new NoOpMetadataCollector();
         if (metadataUrl == null) {
             if (StringUtils.isNotEmpty(metadataAddress)) {
-                metadataUrl = formUrl(metadataAddress, metadataGroup, username, password);
+                metadataUrl = formUrl(metadataAddress, metadataGroup, metadataGroupNameSpace, username, password);
                 metadataUrl = metadataUrl.addParameter(CLUSTER_KEY, cluster);
             }
         }
@@ -159,11 +168,14 @@
         return metaDataCollector;
     }
 
-    private URL formUrl(String config, String group, String username, String password) {
+    private URL formUrl(String config, String group, String nameSpace, String username, String password) {
         URL url = URL.valueOf(config);
         if (StringUtils.isNotEmpty(group)) {
             url = url.addParameter(Constants.GROUP_KEY, group);
         }
+        if (StringUtils.isNotEmpty(nameSpace)){
+            url = url.addParameter(Constants.NAMESPACE_KEY, nameSpace);
+        }
         if (StringUtils.isNotEmpty(username)) {
             url = url.setUsername(username);
         }
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/config/impl/NacosConfiguration.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/config/impl/NacosConfiguration.java
index 1a8d71b..1a36c36 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/config/impl/NacosConfiguration.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/config/impl/NacosConfiguration.java
@@ -31,18 +31,20 @@
 import java.util.Properties;
 
 import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;
+import static com.alibaba.nacos.api.PropertyKeyConst.NAMESPACE;
 
 public class NacosConfiguration implements GovernanceConfiguration {
     private static final Logger logger = LoggerFactory.getLogger(NacosConfiguration.class);
 
     private ConfigService configService;
+    private String nameSpace;
     private String group;
     private URL url;
 
     @Override
     public void init() {
         group = url.getParameter(Constants.GROUP_KEY, "DEFAULT_GROUP");
-
+        nameSpace = url.getParameter(Constants.NAMESPACE_KEY, "public");
         configService = buildConfigService(url);
     }
 
@@ -72,6 +74,7 @@
                 url.getPort() // Port
                 ;
         properties.put(SERVER_ADDR, serverAddr);
+        properties.put(NAMESPACE, nameSpace);
     }
 
 
diff --git a/dubbo-admin-server/src/main/resources/application.properties b/dubbo-admin-server/src/main/resources/application.properties
index d8fc958..a34f434 100644
--- a/dubbo-admin-server/src/main/resources/application.properties
+++ b/dubbo-admin-server/src/main/resources/application.properties
@@ -20,6 +20,10 @@
 admin.config-center=zookeeper://127.0.0.1:2183
 admin.metadata-report.address=zookeeper://127.0.0.1:2183
 
+#admin.registry.address=nacos://127.0.0.1:8848
+#admin.config-center=nacos://127.0.0.1:8848
+#admin.metadata-report.address=nacos://127.0.0.1:8848
+
 admin.root.user.name=root
 admin.root.user.password=root
 #group
@@ -27,6 +31,11 @@
 admin.config-center.group=dubbo
 admin.metadata-report.group=dubbo
 
+#namespace used by nacos
+admin.registry.namespace=public
+admin.config-center.namespace=public
+admin.metadata-report.namespace=public
+
 admin.apollo.token=e16e5cd903fd0c97a116c873b448544b9d086de9
 admin.apollo.appId=test
 admin.apollo.env=dev