This is an automated email from the ASF dual-hosted git repository.

hefengen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new cb0373b139 [type:feat]Discovery adapts to namespace transformation 
(#5655)
cb0373b139 is described below

commit cb0373b13949ce8ecfe67f56489cc7af326873e8
Author: xcsnx <1192709...@qq.com>
AuthorDate: Sat Oct 12 15:09:47 2024 +0800

    [type:feat]Discovery adapts to namespace transformation (#5655)
    
    * commit
    
    * commit
    
    * commit
    
    * discovery client adapt
    
    * fix
    
    * fix
    
    * add sql
    
    * trigger ci
    
    * fix e2e
    
    * fix merge
    
    * fix cr
    
    * fix
    
    * fix
    
    * fix
    
    * fix
    
    ---------
    
    Co-authored-by: ‘xcsnx’ <‘1192709...@qq.com’>
    Co-authored-by: aias00 <rok...@163.com>
    Co-authored-by: moremind <hefen...@apache.org>
---
 db/init/mysql/schema.sql                           |  6 +++
 db/init/ob/schema.sql                              |  8 +++-
 db/init/og/create-table.sql                        | 10 ++++
 db/init/oracle/schema.sql                          | 10 ++++
 db/init/pg/create-table.sql                        |  9 ++++
 db/upgrade/2.6.1-upgrade-2.7.0-mysql.sql           | 21 +++++++++
 db/upgrade/2.6.1-upgrade-2.7.0-og.sql              | 17 +++++++
 db/upgrade/2.6.1-upgrade-2.7.0-oracle.sql          | 16 +++++++
 db/upgrade/2.6.1-upgrade-2.7.0-pg.sql              | 16 +++++++
 .../admin/controller/DiscoveryController.java      |  5 +-
 .../admin/controller/ProxySelectorController.java  |  9 +++-
 .../discovery/AbstractDiscoveryProcessor.java      |  3 ++
 .../DiscoveryDataChangedEventSyncListener.java     | 11 +++++
 .../shenyu/admin/mapper/DiscoveryMapper.java       |  3 +-
 .../shenyu/admin/model/dto/DiscoveryDTO.java       | 34 +++++++++++++-
 .../admin/model/dto/DiscoveryUpstreamDTO.java      | 27 ++++++++++-
 .../admin/model/dto/ProxySelectorAddDTO.java       | 49 ++++++++++++++++++++
 .../shenyu/admin/model/dto/ProxySelectorDTO.java   | 26 +++++++++++
 .../shenyu/admin/model/entity/DiscoveryDO.java     | 54 +++++++++++++++++++++-
 .../admin/model/entity/DiscoveryUpstreamDO.java    | 41 ++++++++++++++++
 .../shenyu/admin/model/entity/ProxySelectorDO.java | 41 ++++++++++++++++
 .../admin/model/query/ProxySelectorQuery.java      | 26 ++++++++++-
 .../apache/shenyu/admin/model/vo/DiscoveryVO.java  | 34 +++++++++++++-
 .../shenyu/admin/model/vo/ProxySelectorVO.java     | 24 ++++++++++
 .../shenyu/admin/service/DiscoveryService.java     |  6 ++-
 .../admin/service/impl/DiscoveryServiceImpl.java   | 22 +++++----
 .../service/impl/DiscoveryUpstreamServiceImpl.java |  1 +
 .../service/impl/ProxySelectorServiceImpl.java     |  6 +++
 .../admin/service/impl/SelectorServiceImpl.java    |  2 +-
 .../AbstractShenyuClientRegisterServiceImpl.java   | 10 ++--
 .../ShenyuClientRegisterDivideServiceImpl.java     |  4 +-
 .../ShenyuClientRegisterGrpcServiceImpl.java       |  6 +--
 ...ShenyuClientRegisterSpringCloudServiceImpl.java |  2 +-
 .../ShenyuClientRegisterWebSocketServiceImpl.java  |  6 +--
 .../shenyu/admin/transfer/DiscoveryTransfer.java   |  6 ++-
 .../shenyu/admin/utils/CommonUpstreamUtils.java    | 20 ++++++--
 .../main/resources/mappers/discovery-sqlmap.xml    | 16 +++++--
 .../mappers/discovery-upstream-sqlmap.xml          |  4 ++
 .../resources/mappers/proxy-selector-sqlmap.xml    |  6 ++-
 .../src/main/resources/sql-script/h2/schema.sql    |  6 +++
 .../DiscoveryDataChangedEventSyncListenerTest.java |  5 +-
 .../admin/mapper/DiscoveryUpstreamMapperTest.java  |  2 +
 .../admin/mapper/ProxySelectorMapperTest.java      |  4 +-
 .../admin/service/ProxySelectorServiceTest.java    |  3 +-
 ...bstractShenyuClientRegisterServiceImplTest.java |  2 +-
 .../admin/utils/CommonUpstreamUtilsTest.java       | 12 +++--
 ...lientDiscoveryConfigRefreshedEventListener.java | 33 +++++++++++--
 .../shenyu/common/dto/DiscoverySyncData.java       | 23 +++++++++
 .../shenyu/common/dto/DiscoveryUpstreamData.java   | 42 ++++++++++++++++-
 .../dto/convert/selector/CommonUpstream.java       | 32 ++++++++++++-
 .../dto/convert/selector/DivideUpstream.java       | 28 +++++++++--
 .../common/dto/convert/selector/GrpcUpstream.java  | 26 ++++++++++-
 .../dto/convert/selector/WebSocketUpstream.java    | 29 ++++++++++--
 .../e2e/testcase/divide/DividePluginTest.java      |  3 ++
 .../shenyu/e2e/client/admin/AdminClient.java       |  2 +
 .../apache/shenyu/e2e/model/data/BindingData.java  | 20 ++++++++
 .../common/dto/DiscoveryConfigRegisterDTO.java     | 34 ++++++++++++++
 .../grpc/ShenyuGrpcDiscoveryConfiguration.java     | 13 ++++--
 ...henyuSpringWebSocketDiscoveryConfiguration.java | 13 ++++--
 .../ShenyuSpringMvcDiscoveryConfiguration.java     | 13 ++++--
 60 files changed, 877 insertions(+), 85 deletions(-)

diff --git a/db/init/mysql/schema.sql b/db/init/mysql/schema.sql
index 09bf1a427f..5ae9999498 100644
--- a/db/init/mysql/schema.sql
+++ b/db/init/mysql/schema.sql
@@ -2432,3 +2432,9 @@ ALTER TABLE `shenyu`.`rule` ADD COLUMN `namespace_id` 
varchar(50) NULL COMMENT '
 ALTER TABLE `shenyu`.`meta_data` ADD COLUMN `namespace_id` varchar(50) NULL 
COMMENT 'namespaceId';
 
 ALTER TABLE `shenyu`.`app_auth` ADD COLUMN `namespace_id` varchar(50) NULL 
COMMENT 'namespaceId' AFTER `enabled`;
+
+ALTER TABLE `shenyu`.`discovery` ADD COLUMN `namespace_id` varchar(50) NULL 
COMMENT 'namespaceId' AFTER `plugin_name`;
+
+ALTER TABLE `shenyu`.`discovery_upstream` ADD COLUMN `namespace_id` 
varchar(50) NULL COMMENT 'namespaceId' AFTER `discovery_handler_id`;
+
+ALTER TABLE `shenyu`.`proxy_selector` ADD COLUMN `namespace_id` varchar(50) 
NULL COMMENT 'namespaceId' AFTER `props`;
\ No newline at end of file
diff --git a/db/init/ob/schema.sql b/db/init/ob/schema.sql
index b3f4cd35ab..9451421c2c 100644
--- a/db/init/ob/schema.sql
+++ b/db/init/ob/schema.sql
@@ -2381,4 +2381,10 @@ ALTER TABLE `shenyu`.`rule` ADD COLUMN `namespace_id` 
varchar(50) NULL COMMENT '
 
 ALTER TABLE `shenyu`.`meta_data` ADD COLUMN `namespace_id` varchar(50) NULL 
COMMENT 'namespaceId';
 
-ALTER TABLE `shenyu`.`app_auth` ADD COLUMN `namespace_id` varchar(50) NULL 
COMMENT 'namespaceId' AFTER `enabled`;
\ No newline at end of file
+ALTER TABLE `shenyu`.`app_auth` ADD COLUMN `namespace_id` varchar(50) NULL 
COMMENT 'namespaceId' AFTER `enabled`;
+
+ALTER TABLE `shenyu`.`discovery` ADD COLUMN `namespace_id` varchar(50) NULL 
COMMENT 'namespaceId' AFTER `plugin_name`;
+
+ALTER TABLE `shenyu`.`discovery_upstream` ADD COLUMN `namespace_id` 
varchar(50) NULL COMMENT 'namespaceId' AFTER `discovery_handler_id`;
+
+ALTER TABLE `shenyu`.`proxy_selector` ADD COLUMN `namespace_id` varchar(50) 
NULL COMMENT 'namespaceId' AFTER `props`;
\ No newline at end of file
diff --git a/db/init/og/create-table.sql b/db/init/og/create-table.sql
index 2577c6a875..6998ecaa67 100644
--- a/db/init/og/create-table.sql
+++ b/db/init/og/create-table.sql
@@ -2761,3 +2761,13 @@ COMMENT ON COLUMN "public"."meta_data"."namespace_id" IS 
'namespaceId';
 
 ALTER TABLE "public"."app_auth" ADD COLUMN namespace_id VARCHAR(50) NULL;
 COMMENT ON COLUMN "public"."app_auth"."namespace_id" IS 'namespaceId';
+
+ALTER TABLE "public"."discovery" ADD COLUMN namespace_id VARCHAR(50) NULL;
+COMMENT ON COLUMN "public"."discovery"."namespace_id" IS 'namespaceId';
+
+ALTER TABLE "public"."discovery_upstream" ADD COLUMN namespace_id VARCHAR(50) 
NULL;
+COMMENT ON COLUMN "public"."discovery_upstream"."namespace_id" IS 
'namespaceId';
+
+ALTER TABLE "public"."proxy_selector" ADD COLUMN namespace_id VARCHAR(50) NULL;
+COMMENT ON COLUMN "public"."proxy_selector"."namespace_id" IS 'namespaceId';
+
diff --git a/db/init/oracle/schema.sql b/db/init/oracle/schema.sql
index 0544837c1f..879169a875 100644
--- a/db/init/oracle/schema.sql
+++ b/db/init/oracle/schema.sql
@@ -2975,3 +2975,13 @@ COMMENT ON COLUMN meta_data.namespace_id IS 
'namespaceId';
 
 ALTER TABLE app_auth ADD namespace_id VARCHAR2(50) NULL;
 COMMENT ON COLUMN app_auth.namespace_id IS 'namespaceId';
+
+ALTER TABLE discovery ADD namespace_id VARCHAR2(50) NULL;
+COMMENT ON COLUMN discovery.namespace_id IS 'namespaceId';
+
+ALTER TABLE discovery_upstream ADD namespace_id VARCHAR2(50) NULL;
+COMMENT ON COLUMN discovery_upstream.namespace_id IS 'namespaceId';
+
+ALTER TABLE proxy_selector ADD namespace_id VARCHAR2(50) NULL;
+COMMENT ON COLUMN proxy_selector.namespace_id IS 'namespaceId';
+
diff --git a/db/init/pg/create-table.sql b/db/init/pg/create-table.sql
index bdf7c40e67..e1dcc195ef 100644
--- a/db/init/pg/create-table.sql
+++ b/db/init/pg/create-table.sql
@@ -2878,3 +2878,12 @@ COMMENT ON COLUMN "public"."meta_data"."namespace_id" IS 
'namespaceId';
 
 ALTER TABLE "public"."app_auth" ADD COLUMN namespace_id VARCHAR(50) NULL;
 COMMENT ON COLUMN "public"."app_auth"."namespace_id" IS 'namespaceId';
+
+ALTER TABLE "public"."discovery" ADD COLUMN namespace_id VARCHAR(50) NULL;
+COMMENT ON COLUMN "public"."discovery"."namespace_id" IS 'namespaceId';
+
+ALTER TABLE "public"."discovery_upstream" ADD COLUMN namespace_id VARCHAR(50) 
NULL;
+COMMENT ON COLUMN "public"."discovery_upstream"."namespace_id" IS 
'namespaceId';
+
+ALTER TABLE "public"."proxy_selector" ADD COLUMN namespace_id VARCHAR(50) NULL;
+COMMENT ON COLUMN "public"."proxy_selector"."namespace_id" IS 'namespaceId';
diff --git a/db/upgrade/2.6.1-upgrade-2.7.0-mysql.sql 
b/db/upgrade/2.6.1-upgrade-2.7.0-mysql.sql
index c17cb70ad9..912579fade 100755
--- a/db/upgrade/2.6.1-upgrade-2.7.0-mysql.sql
+++ b/db/upgrade/2.6.1-upgrade-2.7.0-mysql.sql
@@ -247,3 +247,24 @@ ALTER TABLE `shenyu`.`app_auth` ADD COLUMN `namespace_id` 
varchar(50) NULL COMME
 UPDATE app_auth
 SET namespace_id = '649330b6-c2d7-4edc-be8e-8a54df9eb385'
 WHERE namespace_id IS NULL;
+ALTER TABLE `shenyu`.`discovery` ADD COLUMN `namespace_id` varchar(50) NULL 
COMMENT 'namespaceId' AFTER `plugin_name`;
+
+UPDATE discovery
+SET namespace_id = '649330b6-c2d7-4edc-be8e-8a54df9eb385'
+WHERE namespace_id IS NULL;
+
+ALTER TABLE `shenyu`.`discovery_upstream` ADD COLUMN `namespace_id` 
varchar(50) NULL COMMENT 'namespaceId' AFTER `discovery_handler_id`;
+
+UPDATE discovery_upstream
+SET namespace_id = '649330b6-c2d7-4edc-be8e-8a54df9eb385'
+WHERE namespace_id IS NULL;
+
+
+ALTER TABLE `shenyu`.`proxy_selector` ADD COLUMN `namespace_id` varchar(50) 
NULL COMMENT 'namespaceId' AFTER `props`;
+
+UPDATE proxy_selector
+SET namespace_id = '649330b6-c2d7-4edc-be8e-8a54df9eb385'
+WHERE namespace_id IS NULL;
+
+
+
diff --git a/db/upgrade/2.6.1-upgrade-2.7.0-og.sql 
b/db/upgrade/2.6.1-upgrade-2.7.0-og.sql
index c192eab6a0..711ef4e740 100644
--- a/db/upgrade/2.6.1-upgrade-2.7.0-og.sql
+++ b/db/upgrade/2.6.1-upgrade-2.7.0-og.sql
@@ -284,3 +284,20 @@ ALTER TABLE "public"."app_auth" ADD COLUMN namespace_id 
VARCHAR(50) NULL;
 COMMENT ON COLUMN "public"."app_auth"."namespace_id" IS 'namespaceId';
 
 UPDATE "public"."app_auth" SET namespace_id = 
'649330b6-c2d7-4edc-be8e-8a54df9eb385' WHERE namespace_id IS NULL;
+
+
+
+ALTER TABLE "public"."discovery" ADD COLUMN namespace_id VARCHAR(50) NULL;
+COMMENT ON COLUMN "public"."discovery"."namespace_id" IS 'namespaceId';
+
+UPDATE "public"."discovery" SET namespace_id = 
'649330b6-c2d7-4edc-be8e-8a54df9eb385' WHERE namespace_id IS NULL;
+
+ALTER TABLE "public"."discovery_upstream" ADD COLUMN namespace_id VARCHAR(50) 
NULL;
+COMMENT ON COLUMN "public"."discovery_upstream"."namespace_id" IS 
'namespaceId';
+
+UPDATE "public"."discovery_upstream" SET namespace_id = 
'649330b6-c2d7-4edc-be8e-8a54df9eb385' WHERE namespace_id IS NULL;
+
+ALTER TABLE "public"."proxy_selector" ADD COLUMN namespace_id VARCHAR(50) NULL;
+COMMENT ON COLUMN "public"."proxy_selector"."namespace_id" IS 'namespaceId';
+
+UPDATE "public"."proxy_selector" SET namespace_id = 
'649330b6-c2d7-4edc-be8e-8a54df9eb385' WHERE namespace_id IS NULL;
\ No newline at end of file
diff --git a/db/upgrade/2.6.1-upgrade-2.7.0-oracle.sql 
b/db/upgrade/2.6.1-upgrade-2.7.0-oracle.sql
index fe3d0a4116..5b58f08497 100755
--- a/db/upgrade/2.6.1-upgrade-2.7.0-oracle.sql
+++ b/db/upgrade/2.6.1-upgrade-2.7.0-oracle.sql
@@ -341,3 +341,19 @@ ALTER TABLE app_auth ADD namespace_id VARCHAR2(50) NULL;
 COMMENT ON COLUMN app_auth.namespace_id IS 'namespaceId';
 
 UPDATE app_auth SET namespace_id = '649330b6-c2d7-4edc-be8e-8a54df9eb385' 
WHERE namespace_id IS NULL;
+
+
+ALTER TABLE discovery ADD namespace_id VARCHAR2(50) NULL;
+COMMENT ON COLUMN discovery.namespace_id IS 'namespaceId';
+
+UPDATE discovery SET namespace_id = '649330b6-c2d7-4edc-be8e-8a54df9eb385' 
WHERE namespace_id IS NULL;
+
+ALTER TABLE discovery_upstream ADD namespace_id VARCHAR2(50) NULL;
+COMMENT ON COLUMN discovery_upstream.namespace_id IS 'namespaceId';
+
+UPDATE discovery_upstream SET namespace_id = 
'649330b6-c2d7-4edc-be8e-8a54df9eb385' WHERE namespace_id IS NULL;
+
+ALTER TABLE proxy_selector ADD namespace_id VARCHAR2(50) NULL;
+COMMENT ON COLUMN proxy_selector.namespace_id IS 'namespaceId';
+
+UPDATE proxy_selector SET namespace_id = 
'649330b6-c2d7-4edc-be8e-8a54df9eb385' WHERE namespace_id IS NULL;
\ No newline at end of file
diff --git a/db/upgrade/2.6.1-upgrade-2.7.0-pg.sql 
b/db/upgrade/2.6.1-upgrade-2.7.0-pg.sql
index 3db0a0a23d..207fabf8cd 100755
--- a/db/upgrade/2.6.1-upgrade-2.7.0-pg.sql
+++ b/db/upgrade/2.6.1-upgrade-2.7.0-pg.sql
@@ -284,3 +284,19 @@ COMMENT ON COLUMN "public"."app_auth"."namespace_id" IS 
'namespaceId';
 
 UPDATE "public"."app_auth" SET namespace_id = 
'649330b6-c2d7-4edc-be8e-8a54df9eb385' WHERE namespace_id IS NULL;
 
+
+
+ALTER TABLE "public"."discovery" ADD COLUMN namespace_id VARCHAR(50) NULL;
+COMMENT ON COLUMN "public"."discovery"."namespace_id" IS 'namespaceId';
+
+UPDATE "public"."discovery" SET namespace_id = 
'649330b6-c2d7-4edc-be8e-8a54df9eb385' WHERE namespace_id IS NULL;
+
+ALTER TABLE "public"."discovery_upstream" ADD COLUMN namespace_id VARCHAR(50) 
NULL;
+COMMENT ON COLUMN "public"."discovery_upstream"."namespace_id" IS 
'namespaceId';
+
+UPDATE "public"."discovery_upstream" SET namespace_id = 
'649330b6-c2d7-4edc-be8e-8a54df9eb385' WHERE namespace_id IS NULL;
+
+ALTER TABLE "public"."proxy_selector" ADD COLUMN namespace_id VARCHAR(50) NULL;
+COMMENT ON COLUMN "public"."proxy_selector"."namespace_id" IS 'namespaceId';
+
+UPDATE "public"."proxy_selector" SET namespace_id = 
'649330b6-c2d7-4edc-be8e-8a54df9eb385' WHERE namespace_id IS NULL;
\ No newline at end of file
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DiscoveryController.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DiscoveryController.java
index 34f83c2395..f94ece9b0c 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DiscoveryController.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DiscoveryController.java
@@ -57,11 +57,12 @@ public class DiscoveryController {
      *
      * @param pluginName plugin name
      * @param level      level
+     * @param namespaceId namespaceId
      * @return {@link org.apache.shenyu.admin.model.vo.DiscoveryVO}
      */
     @GetMapping("")
-    public ShenyuAdminResult discovery(final String pluginName, final String 
level) {
-        return ShenyuAdminResult.success(ShenyuResultMessage.SUCCESS, 
discoveryService.discovery(pluginName, level));
+    public ShenyuAdminResult discovery(final String pluginName, final String 
level, final String namespaceId) {
+        return ShenyuAdminResult.success(ShenyuResultMessage.SUCCESS, 
discoveryService.discovery(pluginName, level, namespaceId));
     }
 
     /**
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ProxySelectorController.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ProxySelectorController.java
index d86bd36d14..2c353c7d6f 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ProxySelectorController.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ProxySelectorController.java
@@ -18,6 +18,7 @@
 package org.apache.shenyu.admin.controller;
 
 import org.apache.shenyu.admin.aspect.annotation.RestApi;
+import org.apache.shenyu.admin.mapper.NamespaceMapper;
 import org.apache.shenyu.admin.model.dto.ProxySelectorAddDTO;
 import org.apache.shenyu.admin.model.page.CommonPager;
 import org.apache.shenyu.admin.model.page.PageParameter;
@@ -26,6 +27,7 @@ import org.apache.shenyu.admin.model.result.ShenyuAdminResult;
 import org.apache.shenyu.admin.model.vo.ProxySelectorVO;
 import org.apache.shenyu.admin.service.ProxySelectorService;
 import org.apache.shenyu.admin.utils.ShenyuResultMessage;
+import org.apache.shenyu.admin.validation.annotation.Existed;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -55,14 +57,17 @@ public class ProxySelectorController {
      * @param name        name
      * @param currentPage currentPage
      * @param pageSize    pageSize
+     * @param namespaceId namespaceId
      * @return {@linkplain ShenyuAdminResult}
      */
     @GetMapping("")
     public ShenyuAdminResult queryProxySelector(final String name, @NotNull 
final Integer currentPage,
-                                                @NotNull final Integer 
pageSize) {
+                                                @NotNull final Integer 
pageSize,
+                                                @Existed(message = "namespace 
is not existed",
+                                                        provider = 
NamespaceMapper.class) final String namespaceId) {
 
         CommonPager<ProxySelectorVO> commonPager = proxySelectorService
-                .listByPage(new ProxySelectorQuery(name, new 
PageParameter(currentPage, pageSize)));
+                .listByPage(new ProxySelectorQuery(name, new 
PageParameter(currentPage, pageSize), namespaceId));
         return ShenyuAdminResult.success(ShenyuResultMessage.QUERY_SUCCESS, 
commonPager);
     }
 
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/AbstractDiscoveryProcessor.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/AbstractDiscoveryProcessor.java
index a50f549710..2013e40377 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/AbstractDiscoveryProcessor.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/AbstractDiscoveryProcessor.java
@@ -140,6 +140,7 @@ public abstract class AbstractDiscoveryProcessor implements 
DiscoveryProcessor,
         discoverySyncData.setPluginName(proxySelectorDTO.getPluginName());
         discoverySyncData.setSelectorId(proxySelectorDTO.getId());
         discoverySyncData.setSelectorName(proxySelectorDTO.getName());
+        discoverySyncData.setNamespaceId(proxySelectorDTO.getNamespaceId());
         List<DiscoveryUpstreamData> upstreamDataList = 
upstreamDTOS.stream().map(DiscoveryTransfer.INSTANCE::mapToData).collect(Collectors.toList());
         discoverySyncData.setUpstreamDataList(upstreamDataList);
         DataChangedEvent dataChangedEvent = new 
DataChangedEvent(ConfigGroupEnum.DISCOVER_UPSTREAM, DataEventTypeEnum.UPDATE, 
Collections.singletonList(discoverySyncData));
@@ -181,6 +182,7 @@ public abstract class AbstractDiscoveryProcessor implements 
DiscoveryProcessor,
             discoverySyncData.setSelectorName(proxySelectorDTO.getName());
             discoverySyncData.setPluginName(proxySelectorDTO.getPluginName());
             discoverySyncData.setUpstreamDataList(discoveryUpstreamDataList);
+            
discoverySyncData.setNamespaceId(proxySelectorDTO.getNamespaceId());
             DataChangedEvent dataChangedEvent = new 
DataChangedEvent(ConfigGroupEnum.DISCOVER_UPSTREAM, DataEventTypeEnum.UPDATE, 
Collections.singletonList(discoverySyncData));
             eventPublisher.publishEvent(dataChangedEvent);
         }
@@ -209,6 +211,7 @@ public abstract class AbstractDiscoveryProcessor implements 
DiscoveryProcessor,
         discoverySyncData.setPluginName(proxySelectorDTO.getPluginName());
         discoverySyncData.setSelectorName(proxySelectorDTO.getName());
         discoverySyncData.setSelectorId(proxySelectorDTO.getId());
+        discoverySyncData.setNamespaceId(proxySelectorDTO.getNamespaceId());
         return new DiscoveryDataChangedEventSyncListener(eventPublisher, 
discoveryUpstreamMapper,
                 new CustomDiscoveryUpstreamParser(customMap), 
discoveryHandlerDTO.getId(), discoverySyncData);
     }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListener.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListener.java
index ea981f7dd8..c37cbbb52b 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListener.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListener.java
@@ -43,6 +43,8 @@ import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
+import static 
org.apache.shenyu.common.constant.Constants.SYS_DEFAULT_NAMESPACE_ID;
+
 /**
  * DiscoveryHandler.
  */
@@ -134,6 +136,14 @@ public class DiscoveryDataChangedEventSyncListener 
implements DataChangedEventLi
 
     private DiscoverySyncData buildProxySelectorData(final String value) {
         List<DiscoveryUpstreamData> discoveryUpstreamDTOS = 
keyValueParser.parseValue(value);
+        discoveryUpstreamDTOS.forEach(discoveryUpstreamData -> {
+            if (StringUtils.isBlank(discoveryUpstreamData.getNamespaceId())) {
+                discoveryUpstreamData.setNamespaceId(SYS_DEFAULT_NAMESPACE_ID);
+            }
+        });
+        discoveryUpstreamDTOS = discoveryUpstreamDTOS.stream()
+                .filter(upstreamData -> 
contextInfo.getNamespaceId().equals(upstreamData.getNamespaceId()))
+                .collect(Collectors.toList());
         discoveryUpstreamDTOS.forEach(discoveryUpstreamData -> {
             discoveryUpstreamData.setDiscoveryHandlerId(discoveryHandlerId);
             if (StringUtils.isBlank(discoveryUpstreamData.getProtocol())) {
@@ -145,6 +155,7 @@ public class DiscoveryDataChangedEventSyncListener 
implements DataChangedEventLi
         data.setSelectorId(contextInfo.getSelectorId());
         data.setSelectorName(contextInfo.getSelectorName());
         data.setPluginName(contextInfo.getPluginName());
+        data.setNamespaceId(contextInfo.getNamespaceId());
         return data;
     }
 
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryMapper.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryMapper.java
index 21708e18b8..91b0b5a249 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryMapper.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryMapper.java
@@ -60,9 +60,10 @@ public interface DiscoveryMapper extends ExistProvider {
      *
      * @param pluginName plugin name
      * @param level      level
+     * @param namespaceId namespaceId
      * @return {@linkplain DiscoveryDO}
      */
-    DiscoveryDO selectByPluginNameAndLevel(@Param("pluginName") String 
pluginName, @Param("level") String level);
+    DiscoveryDO selectByPluginNameAndLevelAndNamespaceId(@Param("pluginName") 
String pluginName, @Param("level") String level, @Param("namespaceId") String 
namespaceId);
 
     /**
      * insert discovery.
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/DiscoveryDTO.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/DiscoveryDTO.java
index fb9a6a336a..0a0d5fb453 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/DiscoveryDTO.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/DiscoveryDTO.java
@@ -17,7 +17,11 @@
 
 package org.apache.shenyu.admin.model.dto;
 
+import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.apache.shenyu.admin.mapper.NamespaceMapper;
+import org.apache.shenyu.admin.validation.annotation.Existed;
+
 import java.io.Serializable;
 import java.util.Objects;
 
@@ -66,6 +70,13 @@ public class DiscoveryDTO implements Serializable {
     @NotNull(message = "props not null")
     private String props;
 
+    /**
+     * namespaceId.
+     */
+    @NotBlank
+    @Existed(message = "namespaceId is not existed", provider = 
NamespaceMapper.class)
+    private String namespaceId;
+
     /**
      * discoveryHandler.
      */
@@ -218,6 +229,24 @@ public class DiscoveryDTO implements Serializable {
         this.discoveryHandler = discoveryHandler;
     }
 
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
+
     /**
      * Get discovery rel.
      * @return discovery rel
@@ -248,11 +277,12 @@ public class DiscoveryDTO implements Serializable {
                 && Objects.equals(serverList, that.serverList) && 
Objects.equals(props, that.props)
                 && Objects.equals(level, that.level) && 
Objects.equals(pluginName, that.pluginName)
                 && Objects.equals(discoveryHandler, that.discoveryHandler)
-                && Objects.equals(discoveryRel, that.discoveryRel);
+                && Objects.equals(discoveryRel, that.discoveryRel)
+                && Objects.equals(namespaceId, that.namespaceId);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(id, name, type, serverList, props, level, 
pluginName, discoveryHandler, discoveryRel);
+        return Objects.hash(id, name, type, serverList, props, level, 
pluginName, discoveryHandler, discoveryRel, namespaceId);
     }
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/DiscoveryUpstreamDTO.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/DiscoveryUpstreamDTO.java
index 4f42fb75f2..750c59a89a 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/DiscoveryUpstreamDTO.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/DiscoveryUpstreamDTO.java
@@ -18,6 +18,7 @@
 package org.apache.shenyu.admin.model.dto;
 
 import org.apache.shenyu.admin.mapper.DiscoveryUpstreamMapper;
+import org.apache.shenyu.admin.mapper.NamespaceMapper;
 import org.apache.shenyu.admin.validation.annotation.Existed;
 
 import jakarta.validation.constraints.NotBlank;
@@ -44,6 +45,13 @@ public class DiscoveryUpstreamDTO implements Serializable {
     @NotBlank(message = "discoveryHandlerId不能为空")
     private String discoveryHandlerId;
 
+    /**
+     * namespaceId.
+     */
+    @NotBlank
+    @Existed(message = "namespaceId is not existed", provider = 
NamespaceMapper.class)
+    private String namespaceId;
+
     /**
      * protocol.
      */
@@ -84,7 +92,6 @@ public class DiscoveryUpstreamDTO implements Serializable {
      */
     private Timestamp dateUpdated;
 
-
     /**
      * getId.
      *
@@ -259,4 +266,22 @@ public class DiscoveryUpstreamDTO implements Serializable {
     public void setDateUpdated(final Timestamp dateUpdated) {
         this.dateUpdated = dateUpdated;
     }
+
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/ProxySelectorAddDTO.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/ProxySelectorAddDTO.java
index fa1f1031c5..bb58ba3772 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/ProxySelectorAddDTO.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/ProxySelectorAddDTO.java
@@ -17,6 +17,7 @@
 
 package org.apache.shenyu.admin.model.dto;
 
+import org.apache.shenyu.admin.mapper.NamespaceMapper;
 import org.apache.shenyu.admin.mapper.ProxySelectorMapper;
 import org.apache.shenyu.admin.validation.annotation.Existed;
 
@@ -90,6 +91,13 @@ public class ProxySelectorAddDTO implements Serializable {
      */
     private List<DiscoveryUpstream> discoveryUpstreams;
 
+    /**
+     * namespaceId.
+     */
+    @NotBlank
+    @Existed(message = "namespaceId is not existed", provider = 
NamespaceMapper.class)
+    private String namespaceId;
+
     /**
      * get id.
      *
@@ -288,6 +296,24 @@ public class ProxySelectorAddDTO implements Serializable {
         this.selectorId = selectorId;
     }
 
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
+
     /**
      * get discovery.
      */
@@ -429,6 +455,11 @@ public class ProxySelectorAddDTO implements Serializable {
          */
         private String startupTime;
 
+        /**
+         * namespaceId.
+         */
+        private String namespaceId;
+
         /**
          * get id.
          *
@@ -558,5 +589,23 @@ public class ProxySelectorAddDTO implements Serializable {
         public void setStartupTime(final String startupTime) {
             this.startupTime = startupTime;
         }
+
+        /**
+         * get namespaceId.
+         *
+         * @return namespaceId
+         */
+        public String getNamespaceId() {
+            return namespaceId;
+        }
+
+        /**
+         * set namespaceId.
+         *
+         * @param namespaceId namespaceId
+         */
+        public void setNamespaceId(final String namespaceId) {
+            this.namespaceId = namespaceId;
+        }
     }
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/ProxySelectorDTO.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/ProxySelectorDTO.java
index 8ce72afebf..5aca107f86 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/ProxySelectorDTO.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/ProxySelectorDTO.java
@@ -17,6 +17,7 @@
 
 package org.apache.shenyu.admin.model.dto;
 
+import org.apache.shenyu.admin.mapper.NamespaceMapper;
 import org.apache.shenyu.admin.mapper.ProxySelectorMapper;
 import org.apache.shenyu.admin.validation.annotation.Existed;
 
@@ -67,6 +68,13 @@ public class ProxySelectorDTO implements Serializable {
     @NotBlank
     private String props;
 
+    /**
+     * namespaceId.
+     */
+    @NotBlank
+    @Existed(message = "namespaceId is not existed", provider = 
NamespaceMapper.class)
+    private String namespaceId;
+
     /**
      * getId.
      *
@@ -174,4 +182,22 @@ public class ProxySelectorDTO implements Serializable {
     public void setProps(final String props) {
         this.props = props;
     }
+
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/DiscoveryDO.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/DiscoveryDO.java
index bc02e91f75..2f3a597a3f 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/DiscoveryDO.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/DiscoveryDO.java
@@ -37,6 +37,8 @@ public final class DiscoveryDO extends BaseDO {
 
     private String props;
 
+    private String namespaceId;
+
     public DiscoveryDO() {
 
     }
@@ -65,6 +67,7 @@ public final class DiscoveryDO extends BaseDO {
 
     /**
      * get the name value.
+     *
      * @return the name value
      */
     public String getName() {
@@ -73,6 +76,7 @@ public final class DiscoveryDO extends BaseDO {
 
     /**
      * set the name value.
+     *
      * @param name the name value
      */
     public void setName(final String name) {
@@ -81,6 +85,7 @@ public final class DiscoveryDO extends BaseDO {
 
     /**
      * get the type value.
+     *
      * @return the type value
      */
     public String getType() {
@@ -89,6 +94,7 @@ public final class DiscoveryDO extends BaseDO {
 
     /**
      * set the type value.
+     *
      * @param type the type value
      */
     public void setType(final String type) {
@@ -97,6 +103,7 @@ public final class DiscoveryDO extends BaseDO {
 
     /**
      * get the level.
+     *
      * @return the level.
      */
     public String getLevel() {
@@ -105,6 +112,7 @@ public final class DiscoveryDO extends BaseDO {
 
     /**
      * set the level.
+     *
      * @param level the level.
      */
     public void setLevel(final String level) {
@@ -113,6 +121,7 @@ public final class DiscoveryDO extends BaseDO {
 
     /**
      * get the server list value.
+     *
      * @return the server list value
      */
     public String getServerList() {
@@ -121,6 +130,7 @@ public final class DiscoveryDO extends BaseDO {
 
     /**
      * set the server list.
+     *
      * @param serverList the server list
      */
     public void setServerList(final String serverList) {
@@ -129,6 +139,7 @@ public final class DiscoveryDO extends BaseDO {
 
     /**
      * get pluginName value.
+     *
      * @return pluginName value
      */
     public String getPluginName() {
@@ -137,6 +148,7 @@ public final class DiscoveryDO extends BaseDO {
 
     /**
      * set pluginName value.
+     *
      * @param pluginName pluginName value
      */
     public void setPluginName(final String pluginName) {
@@ -145,6 +157,7 @@ public final class DiscoveryDO extends BaseDO {
 
     /**
      * get props value.
+     *
      * @return props value
      */
     public String getProps() {
@@ -153,12 +166,31 @@ public final class DiscoveryDO extends BaseDO {
 
     /**
      * set props value.
+     *
      * @param props props value
      */
     public void setProps(final String props) {
         this.props = props;
     }
 
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
+
     /**
      * builder.
      *
@@ -185,12 +217,13 @@ public final class DiscoveryDO extends BaseDO {
                 && Objects.equals(level, discoveryDO.level)
                 && Objects.equals(serverList, discoveryDO.serverList)
                 && Objects.equals(pluginName, discoveryDO.pluginName)
-                && Objects.equals(props, discoveryDO.props);
+                && Objects.equals(props, discoveryDO.props)
+                && Objects.equals(namespaceId, discoveryDO.namespaceId);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(super.hashCode(), name, type, level, serverList, 
pluginName, props);
+        return Objects.hash(super.hashCode(), name, type, level, serverList, 
pluginName, props, namespaceId);
     }
 
     public static final class DiscoveryDOBuilder {
@@ -213,12 +246,15 @@ public final class DiscoveryDO extends BaseDO {
 
         private String props;
 
+        private String namespaceId;
+
         private DiscoveryDOBuilder() {
 
         }
 
         /**
          * id.
+         *
          * @param id the id
          * @return DiscoveryDOBuilder.
          */
@@ -315,8 +351,21 @@ public final class DiscoveryDO extends BaseDO {
             return this;
         }
 
+        /**
+         * namespaceId.
+         *
+         * @param namespaceId namespaceId
+         * @return DiscoveryDOBuilder
+         */
+        public DiscoveryDOBuilder namespaceId(final String namespaceId) {
+            this.namespaceId = namespaceId;
+            return this;
+        }
+
+
         /**
          * build DiscoveryDO.
+         *
          * @return DiscoveryDO
          */
         public DiscoveryDO build() {
@@ -330,6 +379,7 @@ public final class DiscoveryDO extends BaseDO {
             discoveryDO.setServerList(serverList);
             discoveryDO.setPluginName(pluginName);
             discoveryDO.setProps(props);
+            discoveryDO.setNamespaceId(namespaceId);
             return discoveryDO;
         }
     }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/DiscoveryUpstreamDO.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/DiscoveryUpstreamDO.java
index c5b62260a2..e3762a6416 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/DiscoveryUpstreamDO.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/DiscoveryUpstreamDO.java
@@ -61,6 +61,11 @@ public class DiscoveryUpstreamDO extends BaseDO {
      */
     private String props;
 
+    /**
+     * namespaceId.
+     */
+    private String namespaceId;
+
     /**
      * DiscoveryUpstreamDO.
      */
@@ -219,6 +224,24 @@ public class DiscoveryUpstreamDO extends BaseDO {
         return new DiscoveryUpstreamBuilder();
     }
 
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
+
     /**
      * buildDiscoveryUpstreamDO.
      *
@@ -236,6 +259,7 @@ public class DiscoveryUpstreamDO extends BaseDO {
                     .weight(item.getWeight())
                     .props(item.getProps())
                     .url(item.getUrl())
+                    .namespaceId(item.getNamespaceId())
                     .dateCreated(currentTime)
                     .dateUpdated(currentTime).build();
             if (StringUtils.hasLength(item.getId())) {
@@ -298,6 +322,11 @@ public class DiscoveryUpstreamDO extends BaseDO {
          */
         private String props;
 
+        /**
+         * namespaceId.
+         */
+        private String namespaceId;
+
         /**
          * id.
          *
@@ -406,6 +435,17 @@ public class DiscoveryUpstreamDO extends BaseDO {
             return this;
         }
 
+        /**
+         * build namespaceId.
+         *
+         * @param namespaceId namespaceId
+         * @return this
+         */
+        public DiscoveryUpstreamBuilder namespaceId(final String namespaceId) {
+            this.namespaceId = namespaceId;
+            return this;
+        }
+
         /**
          * build.
          *
@@ -421,6 +461,7 @@ public class DiscoveryUpstreamDO extends BaseDO {
             discoveryUpstreamDO.setStatus(this.status);
             discoveryUpstreamDO.setWeight(this.weight);
             discoveryUpstreamDO.setProps(this.props);
+            discoveryUpstreamDO.setNamespaceId(this.namespaceId);
             discoveryUpstreamDO.setDateCreated(this.dateCreated);
             discoveryUpstreamDO.setDateUpdated(this.dateUpdated);
             return discoveryUpstreamDO;
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/ProxySelectorDO.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/ProxySelectorDO.java
index 7502a30d4b..13f56bc396 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/ProxySelectorDO.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/ProxySelectorDO.java
@@ -60,6 +60,11 @@ public class ProxySelectorDO extends BaseDO {
      */
     private String props;
 
+    /**
+     * namespaceId.
+     */
+    private String namespaceId;
+
     /**
      * builder.
      *
@@ -86,6 +91,7 @@ public class ProxySelectorDO extends BaseDO {
                     .forwardPort(item.getForwardPort())
                     .type(item.getType())
                     .props(item.getProps())
+                    .namespaceId(item.getNamespaceId())
                     .dateUpdated(currentTime).build();
             if (StringUtils.hasLength(item.getId())) {
                 proxySelectorDO.setId(item.getId());
@@ -230,6 +236,24 @@ public class ProxySelectorDO extends BaseDO {
         this.props = props;
     }
 
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
+
     /**
      * ProxySelectorBuilder.
      */
@@ -275,6 +299,11 @@ public class ProxySelectorDO extends BaseDO {
          */
         private String props;
 
+        /**
+         * namespaceId.
+         */
+        private String namespaceId;
+
         /**
          * ProxySelectorBuilder.
          */
@@ -378,6 +407,17 @@ public class ProxySelectorDO extends BaseDO {
             return this;
         }
 
+        /**
+         * build namespaceId.
+         *
+         * @param namespaceId namespaceId
+         * @return this
+         */
+        public ProxySelectorBuilder namespaceId(final String namespaceId) {
+            this.namespaceId = namespaceId;
+            return this;
+        }
+
         /**
          * build.
          *
@@ -392,6 +432,7 @@ public class ProxySelectorDO extends BaseDO {
             proxySelectorDO.setForwardPort(this.forwardPort);
             proxySelectorDO.setType(this.type);
             proxySelectorDO.setProps(this.props);
+            proxySelectorDO.setNamespaceId(this.namespaceId);
             proxySelectorDO.setDateCreated(this.dateCreated);
             proxySelectorDO.setDateUpdated(this.dateUpdated);
             return proxySelectorDO;
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/query/ProxySelectorQuery.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/query/ProxySelectorQuery.java
index c3c74a7cae..9455cb176d 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/query/ProxySelectorQuery.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/query/ProxySelectorQuery.java
@@ -38,6 +38,11 @@ public class ProxySelectorQuery implements Serializable {
      */
     private PageParameter pageParameter;
 
+    /**
+     * namespace id.
+     */
+    private String namespaceId;
+
     /**
      * ProxySelectorQuery.
      */
@@ -51,10 +56,11 @@ public class ProxySelectorQuery implements Serializable {
      * @param name          name
      * @param pageParameter pageParameter
      */
-    public ProxySelectorQuery(final String name, final PageParameter 
pageParameter) {
+    public ProxySelectorQuery(final String name, final PageParameter 
pageParameter, final String namespaceId) {
 
         this.name = name;
         this.pageParameter = pageParameter;
+        this.namespaceId = namespaceId;
     }
 
     /**
@@ -76,4 +82,22 @@ public class ProxySelectorQuery implements Serializable {
 
         return pageParameter;
     }
+
+    /**
+     * Gets the value of name.
+     *
+     * @return the value of name
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * Sets the namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/DiscoveryVO.java 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/DiscoveryVO.java
index 2d2fdaecee..27b4151a32 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/DiscoveryVO.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/DiscoveryVO.java
@@ -17,7 +17,11 @@
 
 package org.apache.shenyu.admin.model.vo;
 
+import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.apache.shenyu.admin.mapper.NamespaceMapper;
+import org.apache.shenyu.admin.validation.annotation.Existed;
+
 import java.io.Serializable;
 import java.util.Objects;
 
@@ -66,6 +70,13 @@ public class DiscoveryVO implements Serializable {
     @NotNull(message = "props not null")
     private String props;
 
+    /**
+     * namespaceId.
+     */
+    @NotBlank
+    @Existed(message = "namespaceId is not existed", provider = 
NamespaceMapper.class)
+    private String namespaceId;
+
     /**
      * discoveryHandler.
      */
@@ -234,6 +245,24 @@ public class DiscoveryVO implements Serializable {
         this.discoveryRel = discoveryRel;
     }
 
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
+
     @Override
     public boolean equals(final Object o) {
         if (this == o) {
@@ -248,11 +277,12 @@ public class DiscoveryVO implements Serializable {
                 && Objects.equals(level, that.level) && 
Objects.equals(serverList, that.serverList)
                 && Objects.equals(pluginName, that.pluginName) && 
Objects.equals(props, that.props)
                 && Objects.equals(discoveryHandler, that.discoveryHandler)
-                && Objects.equals(discoveryRel, that.discoveryRel);
+                && Objects.equals(discoveryRel, that.discoveryRel)
+                && Objects.equals(namespaceId, that.namespaceId);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(id, name, type, level, serverList, pluginName, 
props, discoveryHandler, discoveryRel);
+        return Objects.hash(id, name, type, level, serverList, pluginName, 
props, discoveryHandler, discoveryRel, namespaceId);
     }
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/ProxySelectorVO.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/ProxySelectorVO.java
index a51590a104..a1391db370 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/ProxySelectorVO.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/ProxySelectorVO.java
@@ -82,6 +82,12 @@ public class ProxySelectorVO implements Serializable {
     private String props;
 
 
+    /**
+     * namespaceId.
+     */
+    private String namespaceId;
+
+
     /**
      * discovery.
      */
@@ -307,6 +313,24 @@ public class ProxySelectorVO implements Serializable {
         this.props = props;
     }
 
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
+
     /**
      * get discovery.
      * @return discovery
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DiscoveryService.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DiscoveryService.java
index 30c73c8165..26f77a81c8 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DiscoveryService.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DiscoveryService.java
@@ -39,9 +39,10 @@ public interface DiscoveryService {
      *
      * @param pluginName plugin name
      * @param level      level
+     * @param namespaceId namespaceId
      * @return the discovery
      */
-    DiscoveryVO discovery(String pluginName, String level);
+    DiscoveryVO discovery(String pluginName, String level, String namespaceId);
 
     /**
      * Create or update string.
@@ -96,9 +97,10 @@ public interface DiscoveryService {
      *
      * @param selectorId selectorId
      * @param pluginName pluginName
+     * @param namespaceId namespaceId
      * @return discoveryHandlerId
      */
-    String registerDefaultDiscovery(String selectorId, String pluginName);
+    String registerDefaultDiscovery(String selectorId, String pluginName, 
String namespaceId);
 
     /**
      * Import discovery data list.
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryServiceImpl.java
index 1c9635a832..ab4bcf7331 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryServiceImpl.java
@@ -63,8 +63,6 @@ import java.util.Properties;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import static 
org.apache.shenyu.common.constant.Constants.SYS_DEFAULT_NAMESPACE_ID;
-
 @Service
 public class DiscoveryServiceImpl implements DiscoveryService {
 
@@ -107,8 +105,8 @@ public class DiscoveryServiceImpl implements 
DiscoveryService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public DiscoveryVO discovery(final String pluginName, final String level) {
-        return 
DiscoveryTransfer.INSTANCE.mapToVo(discoveryMapper.selectByPluginNameAndLevel(pluginName,
 level));
+    public DiscoveryVO discovery(final String pluginName, final String level, 
final String namespaceId) {
+        return 
DiscoveryTransfer.INSTANCE.mapToVo(discoveryMapper.selectByPluginNameAndLevelAndNamespaceId(pluginName,
 level, namespaceId));
     }
 
     @Override
@@ -120,14 +118,14 @@ public class DiscoveryServiceImpl implements 
DiscoveryService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void registerDiscoveryConfig(final DiscoveryConfigRegisterDTO 
discoveryConfigRegisterDTO) {
-        SelectorDO selectorDO = 
findAndLockOnDB(discoveryConfigRegisterDTO.getSelectorName(), 
discoveryConfigRegisterDTO.getPluginName());
+        SelectorDO selectorDO = 
findAndLockOnDB(discoveryConfigRegisterDTO.getSelectorName(), 
discoveryConfigRegisterDTO.getPluginName(), 
discoveryConfigRegisterDTO.getNamespaceId());
         bindingDiscovery(discoveryConfigRegisterDTO, selectorDO);
     }
 
-    private SelectorDO findAndLockOnDB(final String selectorName, final String 
pluginName) {
+    private SelectorDO findAndLockOnDB(final String selectorName, final String 
pluginName, final String namespaceId) {
         SelectorDO selectorDO = null;
         for (int i = 0; i < 3; i++) {
-            selectorDO = 
selectorService.findByNameAndPluginNameAndNamespaceIdForUpdate(selectorName, 
pluginName, SYS_DEFAULT_NAMESPACE_ID);
+            selectorDO = 
selectorService.findByNameAndPluginNameAndNamespaceIdForUpdate(selectorName, 
pluginName, namespaceId);
             if (selectorDO != null) {
                 return selectorDO;
             }
@@ -146,7 +144,9 @@ public class DiscoveryServiceImpl implements 
DiscoveryService {
         proxySelectorDTO.setName(selectorDO.getName());
         proxySelectorDTO.setId(selectorDO.getId());
         
proxySelectorDTO.setPluginName(discoveryConfigRegisterDTO.getPluginName());
-        DiscoveryDO discoveryDO = 
discoveryMapper.selectByPluginNameAndLevel(discoveryConfigRegisterDTO.getPluginName(),
 DiscoveryLevel.PLUGIN.getCode());
+        proxySelectorDTO.setNamespaceId(selectorDO.getNamespaceId());
+        DiscoveryDO discoveryDO = 
discoveryMapper.selectByPluginNameAndLevelAndNamespaceId(discoveryConfigRegisterDTO.getPluginName(),
+                DiscoveryLevel.PLUGIN.getCode(), 
discoveryConfigRegisterDTO.getNamespaceId());
         if (discoveryDO == null) {
             Timestamp currentTime = new Timestamp(System.currentTimeMillis());
             discoveryDO = DiscoveryDO.builder()
@@ -157,6 +157,7 @@ public class DiscoveryServiceImpl implements 
DiscoveryService {
                     .type(discoveryConfigRegisterDTO.getDiscoveryType())
                     .serverList(discoveryConfigRegisterDTO.getServerList())
                     
.props(GsonUtils.getInstance().toJson(Optional.ofNullable(discoveryConfigRegisterDTO.getProps()).orElse(new
 Properties())))
+                    .namespaceId(discoveryConfigRegisterDTO.getNamespaceId())
                     .dateCreated(currentTime)
                     .dateUpdated(currentTime)
                     .build();
@@ -208,6 +209,7 @@ public class DiscoveryServiceImpl implements 
DiscoveryService {
                 .id(discoveryDTO.getId())
                 .name(discoveryDTO.getName())
                 .pluginName(discoveryDTO.getPluginName())
+                .namespaceId(discoveryDTO.getNamespaceId())
                 .level(discoveryDTO.getLevel())
                 .type(discoveryDTO.getType())
                 .serverList(discoveryDTO.getServerList())
@@ -235,6 +237,7 @@ public class DiscoveryServiceImpl implements 
DiscoveryService {
                 .type(discoveryDTO.getType())
                 .serverList(discoveryDTO.getServerList())
                 .props(discoveryDTO.getProps())
+                .namespaceId(discoveryDTO.getNamespaceId())
                 .dateUpdated(currentTime)
                 .build();
         return discoveryMapper.updateSelective(discoveryDO) > 0 ? 
DiscoveryTransfer.INSTANCE.mapToVo(discoveryDO) : null;
@@ -301,7 +304,7 @@ public class DiscoveryServiceImpl implements 
DiscoveryService {
     }
 
     @Override
-    public String registerDefaultDiscovery(final String selectorId, final 
String pluginName) {
+    public String registerDefaultDiscovery(final String selectorId, final 
String pluginName, final String namespaceId) {
         DiscoveryHandlerDO discoveryHandlerDB = 
discoveryHandlerMapper.selectBySelectorId(selectorId);
         if (Objects.nonNull(discoveryHandlerDB)) {
             return discoveryHandlerDB.getId();
@@ -313,6 +316,7 @@ public class DiscoveryServiceImpl implements 
DiscoveryService {
         discoveryDO.setPluginName(pluginName);
         discoveryDO.setType(DiscoveryMode.LOCAL.name().toLowerCase());
         discoveryDO.setId(discoveryId);
+        discoveryDO.setNamespaceId(namespaceId);
         discoveryMapper.insertSelective(discoveryDO);
         DiscoveryHandlerDO discoveryHandlerDO = new DiscoveryHandlerDO();
         String discoveryHandlerId = 
UUIDUtils.getInstance().generateShortUuid();
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryUpstreamServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryUpstreamServiceImpl.java
index 488288c767..dbe2eb8595 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryUpstreamServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryUpstreamServiceImpl.java
@@ -290,6 +290,7 @@ public class DiscoveryUpstreamServiceImpl implements 
DiscoveryUpstreamService {
             proxySelectorDTO.setId(selectorDO.getId());
             
proxySelectorDTO.setPluginName(pluginMapper.selectById(selectorDO.getPluginId()).getName());
             proxySelectorDTO.setName(selectorDO.getName());
+            proxySelectorDTO.setNamespaceId(selectorDO.getNamespaceId());
         } else {
             proxySelectorDTO = 
DiscoveryTransfer.INSTANCE.mapToDTO(proxySelectorDO);
         }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ProxySelectorServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ProxySelectorServiceImpl.java
index d466914d35..2b390527f0 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ProxySelectorServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ProxySelectorServiceImpl.java
@@ -119,6 +119,7 @@ public class ProxySelectorServiceImpl implements 
ProxySelectorService {
             vo.setId(proxySelectorDO.getId());
             vo.setName(proxySelectorDO.getName());
             vo.setType(proxySelectorDO.getType());
+            vo.setNamespaceId(proxySelectorDO.getNamespaceId());
             vo.setForwardPort(proxySelectorDO.getForwardPort());
             vo.setCreateTime(proxySelectorDO.getDateCreated());
             vo.setUpdateTime(proxySelectorDO.getDateUpdated());
@@ -258,6 +259,7 @@ public class ProxySelectorServiceImpl implements 
ProxySelectorService {
                 DiscoveryUpstreamDO discoveryUpstreamDO = 
DiscoveryUpstreamDO.builder()
                         .id(UUIDUtils.getInstance().generateShortUuid())
                         .discoveryHandlerId(discoveryHandlerId)
+                        .namespaceId(discoveryUpstream.getNamespaceId())
                         .protocol(discoveryUpstream.getProtocol())
                         .url(discoveryUpstream.getUrl())
                         .status(discoveryUpstream.getStatus())
@@ -282,6 +284,7 @@ public class ProxySelectorServiceImpl implements 
ProxySelectorService {
                 .type(proxySelectorAddDTO.getDiscovery().getDiscoveryType())
                 .serverList(proxySelectorAddDTO.getDiscovery().getServerList())
                 .pluginName(proxySelectorAddDTO.getPluginName())
+                .namespaceId(proxySelectorAddDTO.getNamespaceId())
                 .level(DiscoveryLevel.SELECTOR.getCode())
                 .dateCreated(currentTime)
                 .dateUpdated(currentTime)
@@ -327,6 +330,7 @@ public class ProxySelectorServiceImpl implements 
ProxySelectorService {
         proxySelectorDTO.setPluginName(proxySelectorAddDTO.getPluginName());
         proxySelectorDTO.setName(proxySelectorAddDTO.getName());
         proxySelectorDTO.setId(selectorId);
+        proxySelectorDTO.setNamespaceId(proxySelectorAddDTO.getNamespaceId());
         DiscoveryHandlerDTO discoveryHandlerDTO = 
DiscoveryTransfer.INSTANCE.mapToDTO(discoveryHandlerDO);
         discoveryProcessor.createProxySelector(discoveryHandlerDTO, 
proxySelectorDTO);
         addUpstreamList(proxySelectorAddDTO, currentTime, discoveryProcessor, 
discoveryHandlerId, proxySelectorDTO);
@@ -369,6 +373,7 @@ public class ProxySelectorServiceImpl implements 
ProxySelectorService {
             DiscoveryUpstreamDO discoveryUpstreamDO = 
DiscoveryUpstreamDO.builder()
                     .id(UUIDUtils.getInstance().generateShortUuid())
                     .discoveryHandlerId(discoveryHandlerId)
+                    .namespaceId(discoveryDO.getNamespaceId())
                     .protocol(discoveryUpstream.getProtocol())
                     .url(discoveryUpstream.getUrl())
                     .status(discoveryUpstream.getStatus())
@@ -402,6 +407,7 @@ public class ProxySelectorServiceImpl implements 
ProxySelectorService {
             proxySelectorDTO.setPluginName(discoveryDO.getPluginName());
             proxySelectorDTO.setName(selectorDO.getName());
             proxySelectorDTO.setId(selectorDO.getId());
+            proxySelectorDTO.setNamespaceId(selectorDO.getNamespaceId());
             
discoveryProcessorHolder.chooseProcessor(discoveryDO.getType()).fetchAll(discoveryHandlerDTO,
 proxySelectorDTO);
         }
     }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java
index 049ac007a0..9e7be95214 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java
@@ -363,7 +363,7 @@ public class SelectorServiceImpl implements SelectorService 
{
     @Override
     public SelectorDO findByNameAndPluginNameAndNamespaceIdForUpdate(final 
String name, final String pluginName, final String namespaceId) {
         PluginDO pluginDO = pluginMapper.selectByNameForUpdate(pluginName);
-        // todo:[To be refactored with namespace]  Temporarily hardcode
+        // todo:[To be refactored with namespace] Temporarily hardcode
         return selectorMapper.findByNameAndPluginIdAndNamespaceId(name, 
pluginDO.getId(), namespaceId);
     }
 
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/AbstractShenyuClientRegisterServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/AbstractShenyuClientRegisterServiceImpl.java
index 8c40ad8bf9..e084058d47 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/AbstractShenyuClientRegisterServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/AbstractShenyuClientRegisterServiceImpl.java
@@ -198,23 +198,25 @@ public abstract class 
AbstractShenyuClientRegisterServiceImpl extends FallbackSh
     }
 
     protected void doDiscoveryLocal(final SelectorDO selectorDO, final String 
pluginName, final List<URIRegisterDTO> uriList) {
-        String discoveryHandlerId = 
discoveryService.registerDefaultDiscovery(selectorDO.getId(), pluginName);
+        String discoveryHandlerId = 
discoveryService.registerDefaultDiscovery(selectorDO.getId(), pluginName, 
selectorDO.getNamespaceId());
         for (URIRegisterDTO uriRegisterDTO : uriList) {
-            DiscoveryUpstreamDTO discoveryUpstreamDTO = 
CommonUpstreamUtils.buildDefaultDiscoveryUpstreamDTO(uriRegisterDTO.getHost(), 
uriRegisterDTO.getPort(), uriRegisterDTO.getProtocol());
+            DiscoveryUpstreamDTO discoveryUpstreamDTO = 
CommonUpstreamUtils.buildDefaultDiscoveryUpstreamDTO(uriRegisterDTO.getHost(),
+                    uriRegisterDTO.getPort(), uriRegisterDTO.getProtocol(), 
selectorDO.getNamespaceId());
             discoveryUpstreamDTO.setDiscoveryHandlerId(discoveryHandlerId);
             
discoveryUpstreamService.nativeCreateOrUpdate(discoveryUpstreamDTO);
         }
-        DiscoverySyncData discoverySyncData = fetch(selectorDO.getId(), 
selectorDO.getName(), pluginName);
+        DiscoverySyncData discoverySyncData = fetch(selectorDO.getId(), 
selectorDO.getName(), pluginName, selectorDO.getNamespaceId());
         eventPublisher.publishEvent(new 
DataChangedEvent(ConfigGroupEnum.DISCOVER_UPSTREAM, DataEventTypeEnum.UPDATE, 
Collections.singletonList(discoverySyncData)));
     }
 
-    protected DiscoverySyncData fetch(final String selectorId, final String 
selectorName, final String pluginName) {
+    protected DiscoverySyncData fetch(final String selectorId, final String 
selectorName, final String pluginName, final String namespaceId) {
         List<DiscoveryUpstreamData> discoveryUpstreamDataList = 
discoveryUpstreamService.findBySelectorId(selectorId);
         DiscoverySyncData discoverySyncData = new DiscoverySyncData();
         discoverySyncData.setUpstreamDataList(discoveryUpstreamDataList);
         discoverySyncData.setPluginName(pluginName);
         discoverySyncData.setSelectorId(selectorId);
         discoverySyncData.setSelectorName(selectorName);
+        discoverySyncData.setNamespaceId(namespaceId);
         return discoverySyncData;
     }
 
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterDivideServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterDivideServiceImpl.java
index 1c623ace8b..1f7d228c0e 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterDivideServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterDivideServiceImpl.java
@@ -110,7 +110,7 @@ public class ShenyuClientRegisterDivideServiceImpl extends 
AbstractContextPathRe
 
     private List<DivideUpstream> buildDivideUpstreamList(final 
List<URIRegisterDTO> uriList) {
         return uriList.stream()
-                .map(dto -> 
CommonUpstreamUtils.buildDivideUpstream(dto.getProtocol(), dto.getHost(), 
dto.getPort()))
+                .map(dto -> 
CommonUpstreamUtils.buildDivideUpstream(dto.getProtocol(), dto.getHost(), 
dto.getPort(), dto.getNamespaceId()))
                 .collect(Collectors.toCollection(CopyOnWriteArrayList::new));
     }
 
@@ -144,7 +144,7 @@ public class ShenyuClientRegisterDivideServiceImpl extends 
AbstractContextPathRe
         for (DivideUpstream divideUpstream : needToRemove) {
             removeDiscoveryUpstream(selectorDO.getId(), 
divideUpstream.getUpstreamUrl());
         }
-        DiscoverySyncData discoverySyncData = fetch(selectorDO.getId(), 
selectorDO.getName(), pluginName);
+        DiscoverySyncData discoverySyncData = fetch(selectorDO.getId(), 
selectorDO.getName(), pluginName, selectorDO.getNamespaceId());
         getEventPublisher().publishEvent(new 
DataChangedEvent(ConfigGroupEnum.DISCOVER_UPSTREAM, DataEventTypeEnum.UPDATE, 
Collections.singletonList(discoverySyncData)));
     }
 
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterGrpcServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterGrpcServiceImpl.java
index f991ea91f0..19e5f34c51 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterGrpcServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterGrpcServiceImpl.java
@@ -119,7 +119,7 @@ public class ShenyuClientRegisterGrpcServiceImpl extends 
AbstractShenyuClientReg
 
     private List<GrpcUpstream> buildGrpcUpstreamList(final 
List<URIRegisterDTO> uriList) {
         return uriList.stream()
-                .map(dto -> 
CommonUpstreamUtils.buildDefaultGrpcUpstream(dto.getHost(), dto.getPort()))
+                .map(dto -> 
CommonUpstreamUtils.buildDefaultGrpcUpstream(dto.getHost(), dto.getPort(), 
dto.getNamespaceId()))
                 .collect(Collectors.toCollection(CopyOnWriteArrayList::new));
     }
 
@@ -137,10 +137,10 @@ public class ShenyuClientRegisterGrpcServiceImpl extends 
AbstractShenyuClientReg
                 .collect(Collectors.toList());
         if (CollectionUtils.isNotEmpty(validOfflineUrl)) {
             for (URIRegisterDTO offlineUrl : validOfflineUrl) {
-                GrpcUpstream grpcUpstream = 
CommonUpstreamUtils.buildDefaultGrpcUpstream(offlineUrl.getHost(), 
offlineUrl.getPort());
+                GrpcUpstream grpcUpstream = 
CommonUpstreamUtils.buildDefaultGrpcUpstream(offlineUrl.getHost(), 
offlineUrl.getPort(), offlineUrl.getNamespaceId());
                 removeDiscoveryUpstream(selectorDO.getId(), 
grpcUpstream.getUpstreamUrl());
             }
-            DiscoverySyncData discoverySyncData = fetch(selectorDO.getId(), 
selectorDO.getName(), pluginName);
+            DiscoverySyncData discoverySyncData = fetch(selectorDO.getId(), 
selectorDO.getName(), pluginName, selectorDO.getNamespaceId());
             if (LOG.isDebugEnabled()) {
                 LOG.debug("grpc offline discoverySyncData:{}", 
GsonUtils.getInstance().toJson(discoverySyncData));
             }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterSpringCloudServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterSpringCloudServiceImpl.java
index 39bf2aaa2a..7d36b26814 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterSpringCloudServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterSpringCloudServiceImpl.java
@@ -104,7 +104,7 @@ public class ShenyuClientRegisterSpringCloudServiceImpl 
extends AbstractContextP
 
     private List<DivideUpstream> buildDivideUpstreamList(final 
List<URIRegisterDTO> uriList) {
         return uriList.stream()
-                .map(dto -> 
CommonUpstreamUtils.buildDefaultDivideUpstream(dto.getHost(), dto.getPort()))
+                .map(dto -> 
CommonUpstreamUtils.buildDefaultDivideUpstream(dto.getHost(), dto.getPort(), 
dto.getNamespaceId()))
                 .collect(Collectors.toCollection(CopyOnWriteArrayList::new));
     }
 
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterWebSocketServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterWebSocketServiceImpl.java
index 57e8cc5c42..25254a0240 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterWebSocketServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/register/ShenyuClientRegisterWebSocketServiceImpl.java
@@ -99,7 +99,7 @@ public class ShenyuClientRegisterWebSocketServiceImpl extends 
AbstractContextPat
 
     private List<WebSocketUpstream> buildWebSocketUpstreamList(final 
List<URIRegisterDTO> uriList) {
         return uriList.stream()
-                .map(dto -> 
CommonUpstreamUtils.buildWebSocketUpstream(dto.getProtocol(), dto.getHost(), 
dto.getPort()))
+                .map(dto -> 
CommonUpstreamUtils.buildWebSocketUpstream(dto.getProtocol(), dto.getHost(), 
dto.getPort(), dto.getNamespaceId()))
                 .collect(Collectors.toCollection(CopyOnWriteArrayList::new));
     }
 
@@ -117,10 +117,10 @@ public class ShenyuClientRegisterWebSocketServiceImpl 
extends AbstractContextPat
                 .collect(Collectors.toList());
         if (CollectionUtils.isNotEmpty(validOfflineUrl)) {
             for (URIRegisterDTO offlineUrl : validOfflineUrl) {
-                WebSocketUpstream webSocketUpstream = 
CommonUpstreamUtils.buildWebSocketUpstream(offlineUrl.getProtocol(), 
offlineUrl.getHost(), offlineUrl.getPort());
+                WebSocketUpstream webSocketUpstream = 
CommonUpstreamUtils.buildWebSocketUpstream(offlineUrl.getProtocol(), 
offlineUrl.getHost(), offlineUrl.getPort(), offlineUrl.getNamespaceId());
                 removeDiscoveryUpstream(selectorDO.getId(), 
webSocketUpstream.getUrl());
             }
-            DiscoverySyncData discoverySyncData = fetch(selectorDO.getId(), 
selectorDO.getName(), pluginName);
+            DiscoverySyncData discoverySyncData = fetch(selectorDO.getId(), 
selectorDO.getName(), pluginName, selectorDO.getNamespaceId());
             getEventPublisher().publishEvent(new 
DataChangedEvent(ConfigGroupEnum.DISCOVER_UPSTREAM, DataEventTypeEnum.UPDATE, 
Collections.singletonList(discoverySyncData)));
         }
         return Constants.SUCCESS;
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/transfer/DiscoveryTransfer.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/transfer/DiscoveryTransfer.java
index e3e0e84369..cec29e0c88 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/transfer/DiscoveryTransfer.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/transfer/DiscoveryTransfer.java
@@ -59,6 +59,7 @@ public enum DiscoveryTransfer {
         return Optional.ofNullable(discoveryUpstreamData).map(data -> 
DiscoveryUpstreamDO.builder()
             .discoveryHandlerId(data.getDiscoveryHandlerId())
             .id(data.getId())
+            .namespaceId(data.getNamespaceId())
             .protocol(data.getProtocol())
             .status(data.getStatus())
             .weight(data.getWeight())
@@ -133,6 +134,7 @@ public enum DiscoveryTransfer {
             DiscoveryVO discoveryVO = new DiscoveryVO();
             discoveryVO.setId(data.getId());
             discoveryVO.setName(data.getName());
+            discoveryVO.setNamespaceId(data.getNamespaceId());
             discoveryVO.setType(data.getType());
             discoveryVO.setLevel(data.getLevel());
             discoveryVO.setServerList(data.getServerList());
@@ -206,6 +208,7 @@ public enum DiscoveryTransfer {
             
discoveryUpstreamData.setDiscoveryHandlerId(data.getDiscoveryHandlerId());
             discoveryUpstreamData.setWeight(data.getWeight());
             discoveryUpstreamData.setProps(data.getProps());
+            discoveryUpstreamData.setNamespaceId(data.getNamespaceId());
             discoveryUpstreamData.setDateCreated(data.getDateCreated());
             discoveryUpstreamData.setDateUpdated(data.getDateUpdated());
             return discoveryUpstreamData;
@@ -269,6 +272,7 @@ public enum DiscoveryTransfer {
             proxySelectorDTO.setProps(data.getProps());
             proxySelectorDTO.setForwardPort(data.getForwardPort());
             proxySelectorDTO.setPluginName(data.getPluginName());
+            proxySelectorDTO.setNamespaceId(data.getNamespaceId());
             return proxySelectorDTO;
         }).orElse(null);
     }
@@ -337,6 +341,6 @@ public enum DiscoveryTransfer {
      * @return DiscoveryUpstreamData
      */
     public DiscoveryUpstreamData mapToDiscoveryUpstreamData(CommonUpstream 
commonUpstream) {
-        return 
mapToData(CommonUpstreamUtils.buildDefaultDiscoveryUpstreamDTO(commonUpstream.getUpstreamUrl().split(":")[0],
 Integer.valueOf(commonUpstream.getUpstreamUrl().split(":")[1]), 
commonUpstream.getProtocol()));
+        return 
mapToData(CommonUpstreamUtils.buildDefaultDiscoveryUpstreamDTO(commonUpstream.getUpstreamUrl().split(":")[0],
 Integer.valueOf(commonUpstream.getUpstreamUrl().split(":")[1]), 
commonUpstream.getProtocol(),commonUpstream.getNamespaceId()));
     }
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/utils/CommonUpstreamUtils.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/utils/CommonUpstreamUtils.java
index 4cce642a6a..9402117dc8 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/utils/CommonUpstreamUtils.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/utils/CommonUpstreamUtils.java
@@ -47,14 +47,16 @@ public class CommonUpstreamUtils {
      *
      * @param host the host
      * @param port the port
+     * @param namespaceId the namespaceId
      * @return the divide upstream
      */
-    public static DivideUpstream buildDefaultDivideUpstream(final String host, 
final Integer port) {
+    public static DivideUpstream buildDefaultDivideUpstream(final String host, 
final Integer port, final String namespaceId) {
         return DivideUpstream.builder().upstreamHost(LOCALHOST)
                 .protocol("http://";).upstreamUrl(buildUrl(host, port))
                 .weight(50).warmup(Constants.WARMUP_TIME)
                 .timestamp(System.currentTimeMillis())
                 .status(Objects.nonNull(port) && StringUtils.isNotBlank(host))
+                .namespaceId(namespaceId)
                 .build();
     }
 
@@ -64,15 +66,17 @@ public class CommonUpstreamUtils {
      * @param host     host
      * @param port     port
      * @param protocol protocol
+     * @param namespaceId namespaceId
      * @return DiscoveryUpstreamDTO
      */
-    public static DiscoveryUpstreamDTO buildDefaultDiscoveryUpstreamDTO(final 
String host, final Integer port, final String protocol) {
+    public static DiscoveryUpstreamDTO buildDefaultDiscoveryUpstreamDTO(final 
String host, final Integer port, final String protocol, final String 
namespaceId) {
         DiscoveryUpstreamDTO discoveryUpstreamDTO = new DiscoveryUpstreamDTO();
         discoveryUpstreamDTO.setProps("{\"warmupTime\":\"10\"}");
         discoveryUpstreamDTO.setUrl(buildUrl(host, port));
         discoveryUpstreamDTO.setProtocol(protocol);
         discoveryUpstreamDTO.setStatus(0);
         discoveryUpstreamDTO.setWeight(DEFAULT_WEIGHT);
+        discoveryUpstreamDTO.setNamespaceId(namespaceId);
         return discoveryUpstreamDTO;
     }
 
@@ -95,14 +99,16 @@ public class CommonUpstreamUtils {
      * @param protocol the protocol
      * @param host     the host
      * @param port     the port
+     * @param namespaceId the namespaceId
      * @return the divide upstream
      */
-    public static DivideUpstream buildDivideUpstream(final String protocol, 
final String host, final Integer port) {
+    public static DivideUpstream buildDivideUpstream(final String protocol, 
final String host, final Integer port, final String namespaceId) {
         return DivideUpstream.builder().upstreamHost(LOCALHOST)
                 .protocol(protocol).upstreamUrl(buildUrl(host, port))
                 .weight(50).warmup(Constants.WARMUP_TIME)
                 .timestamp(System.currentTimeMillis())
                 .status(Objects.nonNull(port) && StringUtils.isNotBlank(host))
+                .namespaceId(namespaceId)
                 .build();
     }
 
@@ -126,14 +132,16 @@ public class CommonUpstreamUtils {
      * @param protocol the protocol
      * @param host     the host
      * @param port     the port
+     * @param namespaceId the namespaceId
      * @return the websocket upstream
      */
-    public static WebSocketUpstream buildWebSocketUpstream(final String 
protocol, final String host, final Integer port) {
+    public static WebSocketUpstream buildWebSocketUpstream(final String 
protocol, final String host, final Integer port, final String namespaceId) {
         return WebSocketUpstream.builder().host(LOCALHOST).protocol(protocol)
                 .upstreamUrl(buildUrl(host, port)).weight(DEFAULT_WEIGHT)
                 .warmup(Constants.WARMUP_TIME)
                 .timestamp(System.currentTimeMillis())
                 .status(Objects.nonNull(port) && StringUtils.isNotBlank(host))
+                .namespaceId(namespaceId)
                 .build();
     }
 
@@ -172,12 +180,14 @@ public class CommonUpstreamUtils {
      *
      * @param host the host
      * @param port the port
+     * @param namespaceId the namespaceId
      * @return the grpc upstream
      */
-    public static GrpcUpstream buildDefaultGrpcUpstream(final String host, 
final Integer port) {
+    public static GrpcUpstream buildDefaultGrpcUpstream(final String host, 
final Integer port, final String namespaceId) {
         return GrpcUpstream.builder().upstreamUrl(buildUrl(host, port))
                 .weight(DEFAULT_WEIGHT).timestamp(System.currentTimeMillis())
                 .status(Objects.nonNull(port) && StringUtils.isNotBlank(host))
+                .namespaceId(namespaceId)
                 .build();
     }
 
diff --git a/shenyu-admin/src/main/resources/mappers/discovery-sqlmap.xml 
b/shenyu-admin/src/main/resources/mappers/discovery-sqlmap.xml
index a97a41dab7..ab48ec8965 100644
--- a/shenyu-admin/src/main/resources/mappers/discovery-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/discovery-sqlmap.xml
@@ -55,11 +55,11 @@
         WHERE id = #{id, jdbcType=VARCHAR}
     </select>
 
-    <select id="selectByPluginNameAndLevel" parameterType="java.lang.String" 
resultMap="BaseResultMap">
+    <select id="selectByPluginNameAndLevelAndNamespaceId" 
parameterType="java.lang.String" resultMap="BaseResultMap">
         SELECT
         <include refid="Base_Column_List"/>
         FROM discovery
-        WHERE plugin_name = #{pluginName, jdbcType=VARCHAR} AND level = 
#{level, jdbcType=VARCHAR}
+        WHERE plugin_name = #{pluginName, jdbcType=VARCHAR} AND level = 
#{level, jdbcType=VARCHAR} AND namespace_id = #{namespaceId, jdbcType=VARCHAR}
     </select>
 
     <select id="selectAll" 
resultType="org.apache.shenyu.admin.model.entity.DiscoveryDO">
@@ -97,7 +97,8 @@
         level,
         server_list,
         plugin_name,
-        props)
+        props,
+        namespace_id)
         VALUES
         (#{id, jdbcType=VARCHAR},
         #{dateCreated, jdbcType=TIMESTAMP},
@@ -107,7 +108,8 @@
         #{level, jdbcType=VARCHAR},
         #{serverList, jdbcType=VARCHAR},
         #{pluginName, jdbcType=VARCHAR},
-        #{props, jdbcType=LONGVARCHAR})
+        #{props, jdbcType=LONGVARCHAR},
+        #{namespaceId, jdbcType=VARCHAR})
     </insert>
 
     <insert id="insertSelective" 
parameterType="org.apache.shenyu.admin.model.entity.DiscoveryDO">
@@ -138,6 +140,9 @@
             <if test="props != null">
                 props,
             </if>
+            <if test="namespaceId != null">
+                namespace_id,
+            </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             #{id, jdbcType=VARCHAR},
@@ -165,6 +170,9 @@
             <if test="props != null">
                 #{props, jdbcType=LONGVARCHAR},
             </if>
+            <if test="namespaceId != null">
+                #{namespaceId, jdbcType=VARCHAR},
+            </if>
         </trim>
     </insert>
 
diff --git 
a/shenyu-admin/src/main/resources/mappers/discovery-upstream-sqlmap.xml 
b/shenyu-admin/src/main/resources/mappers/discovery-upstream-sqlmap.xml
index fd12ab01dd..c6c16ab621 100644
--- a/shenyu-admin/src/main/resources/mappers/discovery-upstream-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/discovery-upstream-sqlmap.xml
@@ -52,6 +52,7 @@
         INSERT INTO discovery_upstream (
         id,
         discovery_handler_id,
+        namespace_id,
         protocol,
         url,
         status,
@@ -62,6 +63,7 @@
         VALUES (
         #{id, jdbcType=VARCHAR},
         #{discoveryHandlerId,jdbcType=VARCHAR},
+        #{namespaceId, jdbcType=VARCHAR},
         #{protocol,jdbcType=VARCHAR},
         #{url,jdbcType=VARCHAR},
         #{status,jdbcType=INTEGER},
@@ -190,6 +192,7 @@
         INSERT INTO discovery_upstream (
         id,
         discovery_handler_id,
+        namespace_id,
         protocol,
         url,
         status,
@@ -201,6 +204,7 @@
         <foreach collection="list" separator="," item="item">
             (#{item.id, jdbcType=VARCHAR},
             #{item.discoveryHandlerId,jdbcType=VARCHAR},
+            #{item.namespaceId,jdbcType=VARCHAR},
             #{item.protocol,jdbcType=VARCHAR},
             #{item.url,jdbcType=VARCHAR},
             #{item.status,jdbcType=INTEGER},
diff --git a/shenyu-admin/src/main/resources/mappers/proxy-selector-sqlmap.xml 
b/shenyu-admin/src/main/resources/mappers/proxy-selector-sqlmap.xml
index d27f1b7008..4a39e9bfc4 100644
--- a/shenyu-admin/src/main/resources/mappers/proxy-selector-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/proxy-selector-sqlmap.xml
@@ -52,6 +52,7 @@
         <include refid="Base_Column_List"/>
         FROM proxy_selector
         <where>
+            namespace_id = #{namespaceId, jdbcType=VARCHAR}
             <if test="name != null and name != ''">
                 <bind name="nameLike" value="('%' + name + '%')"/>
                 AND name LIKE #{nameLike, jdbcType=VARCHAR}
@@ -74,6 +75,7 @@
         type,
         forward_port,
         props,
+        namespace_id,
         date_created,
         date_updated)
         VALUES (
@@ -83,6 +85,7 @@
         #{type,jdbcType=VARCHAR},
         #{forwardPort,jdbcType=INTEGER},
         #{props,jdbcType=VARCHAR},
+        #{namespaceId,jdbcType=VARCHAR},
         #{dateCreated, jdbcType=TIMESTAMP},
         #{dateUpdated, jdbcType=TIMESTAMP})
     </insert>
@@ -97,6 +100,7 @@
         props=#{props,jdbcType=VARCHAR},
         date_updated=#{dateUpdated, jdbcType=TIMESTAMP}
         WHERE id=#{id, jdbcType=VARCHAR}
+        AND namespace_id = #{namespaceId, jdbcType=VARCHAR}
     </update>
 
     <select id="selectByIds" parameterType="java.util.List" 
resultMap="BaseResultMap">
@@ -117,7 +121,7 @@
     </select>
 
     <select id="selectByHandlerId" 
resultType="org.apache.shenyu.admin.model.entity.ProxySelectorDO">
-        SELECT ps.id , ps.name, ps.plugin_name , ps.type, ps.forward_port , 
ps.props
+        SELECT ps.id , ps.name, ps.plugin_name , ps.type, ps.forward_port , 
ps.props, ps.namespace_id
         FROM proxy_selector ps inner join discovery_rel dr on ps.id = 
dr.proxy_selector_id
         where dr.discovery_handler_id = #{discoveryHandlerId}
     </select>
diff --git a/shenyu-admin/src/main/resources/sql-script/h2/schema.sql 
b/shenyu-admin/src/main/resources/sql-script/h2/schema.sql
index 5566360ef4..4d0d92c007 100755
--- a/shenyu-admin/src/main/resources/sql-script/h2/schema.sql
+++ b/shenyu-admin/src/main/resources/sql-script/h2/schema.sql
@@ -1400,3 +1400,9 @@ ALTER TABLE `rule` ADD COLUMN `namespace_id` varchar(50) 
NULL COMMENT 'namespace
 ALTER TABLE `meta_data` ADD COLUMN `namespace_id` varchar(50) NULL COMMENT 
'namespaceId' ;
 
 ALTER TABLE `app_auth` ADD COLUMN `namespace_id` varchar(50) NULL COMMENT 
'namespaceId' ;
+
+ALTER TABLE `discovery` ADD COLUMN `namespace_id` varchar(50) NULL COMMENT 
'namespaceId' AFTER `plugin_name`;
+
+ALTER TABLE `discovery_upstream` ADD COLUMN `namespace_id` varchar(50) NULL 
COMMENT 'namespaceId' AFTER `discovery_handler_id`;
+
+ALTER TABLE `proxy_selector` ADD COLUMN `namespace_id` varchar(50) NULL 
COMMENT 'namespaceId' AFTER `props`;
\ No newline at end of file
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListenerTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListenerTest.java
index df9c2d0e21..8da5ab8fdd 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListenerTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListenerTest.java
@@ -37,6 +37,7 @@ import org.springframework.context.ApplicationEventPublisher;
 import java.util.ArrayList;
 import java.util.List;
 
+import static 
org.apache.shenyu.common.constant.Constants.SYS_DEFAULT_NAMESPACE_ID;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doNothing;
@@ -70,13 +71,15 @@ public class DiscoveryDataChangedEventSyncListenerTest {
 
     @Test
     public void testOnChange() {
-        List<DiscoveryUpstreamData> discoveryUpstreamDTOS = new ArrayList<>();
+        final List<DiscoveryUpstreamData> discoveryUpstreamDTOS = new 
ArrayList<>();
         DiscoveryUpstreamData discoveryUpstreamData = new 
DiscoveryUpstreamData();
         discoveryUpstreamData.setProtocol("http");
         discoveryUpstreamData.setUrl("1111");
+        discoveryUpstreamData.setNamespaceId(SYS_DEFAULT_NAMESPACE_ID);
         discoveryUpstreamDTOS.add(discoveryUpstreamData);
         
doNothing().when(eventPublisher).publishEvent(any(DataChangedEvent.class));
         
when(keyValueParser.parseValue(anyString())).thenReturn(discoveryUpstreamDTOS);
+        
when(contextInfo.getNamespaceId()).thenReturn(SYS_DEFAULT_NAMESPACE_ID);
         DiscoveryDataChangedEvent event = new DiscoveryDataChangedEvent("key", 
"value", DiscoveryDataChangedEvent.Event.ADDED);
         discoveryDataChangedEventSyncListener.onChange(event);
         verify(discoveryUpstreamMapper).insert(any(DiscoveryUpstreamDO.class));
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/DiscoveryUpstreamMapperTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/DiscoveryUpstreamMapperTest.java
index ddfffb5edc..8c0687317d 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/DiscoveryUpstreamMapperTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/DiscoveryUpstreamMapperTest.java
@@ -29,6 +29,7 @@ import java.sql.Timestamp;
 import java.util.Collections;
 import java.util.List;
 
+import static 
org.apache.shenyu.common.constant.Constants.SYS_DEFAULT_NAMESPACE_ID;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 class DiscoveryUpstreamMapperTest extends AbstractSpringIntegrationTest {
@@ -97,6 +98,7 @@ class DiscoveryUpstreamMapperTest extends 
AbstractSpringIntegrationTest {
         discoveryUpstreamDO.setProps("test");
         discoveryUpstreamDO.setUrl("test");
         discoveryUpstreamDO.setProtocol("test");
+        discoveryUpstreamDO.setNamespaceId(SYS_DEFAULT_NAMESPACE_ID);
         discoveryUpstreamDO.setDateCreated(new 
Timestamp(System.currentTimeMillis()));
         discoveryUpstreamDO.setDateUpdated(new 
Timestamp(System.currentTimeMillis()));
         return discoveryUpstreamDO;
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/ProxySelectorMapperTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/ProxySelectorMapperTest.java
index a38cdd2621..ad8d54f769 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/ProxySelectorMapperTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/ProxySelectorMapperTest.java
@@ -30,6 +30,7 @@ import java.sql.Timestamp;
 import java.util.Collections;
 import java.util.List;
 
+import static 
org.apache.shenyu.common.constant.Constants.SYS_DEFAULT_NAMESPACE_ID;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
@@ -59,7 +60,7 @@ class ProxySelectorMapperTest extends 
AbstractSpringIntegrationTest {
         ProxySelectorDO newProxySelectorDO = build();
         newProxySelectorDO.setName("test2");
         proxySelectorMapper.insert(newProxySelectorDO);
-        ProxySelectorQuery query = new ProxySelectorQuery("test2", new 
PageParameter());
+        ProxySelectorQuery query = new ProxySelectorQuery("test2", new 
PageParameter(), SYS_DEFAULT_NAMESPACE_ID);
         List<ProxySelectorDO> list = proxySelectorMapper.selectByQuery(query);
         assertEquals(list.size(), 1);
         assertEquals(list.get(0).getName(), "test2");
@@ -111,6 +112,7 @@ class ProxySelectorMapperTest extends 
AbstractSpringIntegrationTest {
         proxySelectorDO.setForwardPort(8080);
         proxySelectorDO.setType("tcp");
         proxySelectorDO.setProps("test");
+        proxySelectorDO.setNamespaceId(SYS_DEFAULT_NAMESPACE_ID);
         proxySelectorDO.setDateCreated(new 
Timestamp(System.currentTimeMillis()));
         proxySelectorDO.setDateUpdated(new 
Timestamp(System.currentTimeMillis()));
         return proxySelectorDO;
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/ProxySelectorServiceTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/ProxySelectorServiceTest.java
index ca84ae0db0..6948169dc8 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/ProxySelectorServiceTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/ProxySelectorServiceTest.java
@@ -48,6 +48,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import static 
org.apache.shenyu.common.constant.Constants.SYS_DEFAULT_NAMESPACE_ID;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.mockito.ArgumentMatchers.any;
@@ -91,7 +92,7 @@ class ProxySelectorServiceTest {
     @Test
     void testListByPage() {
 
-        final ProxySelectorQuery proxySelectorQuery = new 
ProxySelectorQuery("test", new PageParameter());
+        final ProxySelectorQuery proxySelectorQuery = new 
ProxySelectorQuery("test", new PageParameter(), SYS_DEFAULT_NAMESPACE_ID);
         final List<ProxySelectorDO> list = new ArrayList<>();
         ProxySelectorDO proxySelectorDO = new ProxySelectorDO();
         proxySelectorDO.setId("123");
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/register/AbstractShenyuClientRegisterServiceImplTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/register/AbstractShenyuClientRegisterServiceImplTest.java
index 0dea64a0a8..7a1f72eafb 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/register/AbstractShenyuClientRegisterServiceImplTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/register/AbstractShenyuClientRegisterServiceImplTest.java
@@ -215,7 +215,7 @@ public final class 
AbstractShenyuClientRegisterServiceImplTest {
         }
 
         @Override
-        protected DiscoverySyncData fetch(final String selectorId, final 
String selectorName, final String pluginName) {
+        protected DiscoverySyncData fetch(final String selectorId, final 
String selectorName, final String pluginName, final String namespaceId) {
             return new DiscoverySyncData();
         }
 
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/utils/CommonUpstreamUtilsTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/utils/CommonUpstreamUtilsTest.java
index 5d77b59c6e..1f8964ad31 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/utils/CommonUpstreamUtilsTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/utils/CommonUpstreamUtilsTest.java
@@ -28,6 +28,8 @@ import org.junit.Test;
 import java.util.ArrayList;
 import java.util.List;
 
+import static 
org.apache.shenyu.common.constant.Constants.SYS_DEFAULT_NAMESPACE_ID;
+
 /**
  * Test case for {@link CommonUpstreamUtils}.
  */
@@ -39,7 +41,7 @@ public final class CommonUpstreamUtilsTest {
 
     @Test
     public void buildDefaultDivideUpstreamWithHostAndPort() {
-        DivideUpstream divideUpstream = 
CommonUpstreamUtils.buildDefaultDivideUpstream(HOST, PORT);
+        DivideUpstream divideUpstream = 
CommonUpstreamUtils.buildDefaultDivideUpstream(HOST, PORT, 
SYS_DEFAULT_NAMESPACE_ID);
         Assert.assertNotNull(divideUpstream);
         Assert.assertEquals(HOST + ":" + PORT, 
divideUpstream.getUpstreamUrl());
         Assert.assertEquals(divideUpstream.getUpstreamHost(), "localhost");
@@ -55,7 +57,7 @@ public final class CommonUpstreamUtilsTest {
 
     @Test
     public void buildDivideUpstream() {
-        DivideUpstream divideUpstream = 
CommonUpstreamUtils.buildDivideUpstream("http", HOST, PORT);
+        DivideUpstream divideUpstream = 
CommonUpstreamUtils.buildDivideUpstream("http", HOST, PORT, 
SYS_DEFAULT_NAMESPACE_ID);
         Assert.assertNotNull(divideUpstream);
         Assert.assertEquals(HOST + ":" + PORT, 
divideUpstream.getUpstreamUrl());
         Assert.assertEquals("http", divideUpstream.getProtocol());
@@ -71,7 +73,7 @@ public final class CommonUpstreamUtilsTest {
 
     @Test
     public void buildWebSocketUpstream() {
-        WebSocketUpstream webSocketUpstream = 
CommonUpstreamUtils.buildWebSocketUpstream("tcp", HOST, PORT);
+        WebSocketUpstream webSocketUpstream = 
CommonUpstreamUtils.buildWebSocketUpstream("tcp", HOST, PORT, 
SYS_DEFAULT_NAMESPACE_ID);
         Assert.assertNotNull(webSocketUpstream);
         Assert.assertEquals(HOST + ":" + PORT, 
webSocketUpstream.getUpstreamUrl());
         Assert.assertEquals("tcp", webSocketUpstream.getProtocol());
@@ -95,7 +97,7 @@ public final class CommonUpstreamUtilsTest {
 
     @Test
     public void buildDefaultGrpcUpstream() {
-        GrpcUpstream grpcUpstream = 
CommonUpstreamUtils.buildDefaultGrpcUpstream(HOST, PORT);
+        GrpcUpstream grpcUpstream = 
CommonUpstreamUtils.buildDefaultGrpcUpstream(HOST, PORT, 
SYS_DEFAULT_NAMESPACE_ID);
         Assert.assertNotNull(grpcUpstream);
         Assert.assertEquals(HOST + ":" + PORT, grpcUpstream.getUpstreamUrl());
         Assert.assertNull(grpcUpstream.getProtocol());
@@ -112,7 +114,7 @@ public final class CommonUpstreamUtilsTest {
     @Test
     public void convertCommonUpstreamList() {
         List<DivideUpstream> existDivideUpstreams = new ArrayList<>();
-        DivideUpstream divideUpstream = 
CommonUpstreamUtils.buildDivideUpstream("http", HOST, PORT);
+        DivideUpstream divideUpstream = 
CommonUpstreamUtils.buildDivideUpstream("http", HOST, PORT, 
SYS_DEFAULT_NAMESPACE_ID);
         existDivideUpstreams.add(divideUpstream);
 
         List<CommonUpstream> commonUpstreams = 
CommonUpstreamUtils.convertCommonUpstreamList(existDivideUpstreams);
diff --git 
a/shenyu-client/shenyu-client-core/src/main/java/org/apache/shenyu/client/core/register/ClientDiscoveryConfigRefreshedEventListener.java
 
b/shenyu-client/shenyu-client-core/src/main/java/org/apache/shenyu/client/core/register/ClientDiscoveryConfigRefreshedEventListener.java
index b15cf7ada1..0273b98032 100644
--- 
a/shenyu-client/shenyu-client-core/src/main/java/org/apache/shenyu/client/core/register/ClientDiscoveryConfigRefreshedEventListener.java
+++ 
b/shenyu-client/shenyu-client-core/src/main/java/org/apache/shenyu/client/core/register/ClientDiscoveryConfigRefreshedEventListener.java
@@ -17,10 +17,13 @@
 
 package org.apache.shenyu.client.core.register;
 
+import com.google.common.collect.Lists;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.shenyu.common.constant.Constants;
 import org.apache.shenyu.common.enums.PluginEnum;
 import org.apache.shenyu.common.exception.ShenyuException;
 import org.apache.shenyu.register.client.http.HttpClientRegisterRepository;
+import org.apache.shenyu.register.common.config.ShenyuClientConfig;
 import org.apache.shenyu.register.common.config.ShenyuDiscoveryConfig;
 import org.apache.shenyu.register.common.dto.DiscoveryConfigRegisterDTO;
 import org.slf4j.Logger;
@@ -29,6 +32,8 @@ import org.springframework.context.ApplicationListener;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.core.Ordered;
 
+import java.util.List;
+
 public final class ClientDiscoveryConfigRefreshedEventListener implements 
ApplicationListener<ContextRefreshedEvent>, Ordered {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(ClientDiscoveryConfigRefreshedEventListener.class);
@@ -41,22 +46,39 @@ public final class 
ClientDiscoveryConfigRefreshedEventListener implements Applic
 
     private final PluginEnum plugin;
 
+    /**
+     * multiple namespace support.
+     */
+    private final List<String> namespace;
+
     public ClientDiscoveryConfigRefreshedEventListener(final 
ShenyuDiscoveryConfig shenyuDiscoveryConfig,
                                                        final 
HttpClientRegisterRepository httpClientRegisterRepository,
                                                        final 
ClientRegisterConfig clientRegisterConfig,
-                                                       final PluginEnum 
plugin) {
+                                                       final PluginEnum plugin,
+                                                       final 
ShenyuClientConfig shenyuClientConfig) {
         this.shenyuDiscoveryConfig = shenyuDiscoveryConfig;
         this.httpClientRegisterRepository = httpClientRegisterRepository;
         this.clientRegisterConfig = clientRegisterConfig;
         this.plugin = plugin;
+        String namespace = shenyuClientConfig.getNamespace();
+        if (StringUtils.isBlank(namespace)) {
+            LOG.warn("current shenyu.namespace is null, use default namespace: 
{}", Constants.SYS_DEFAULT_NAMESPACE_ID);
+            namespace = Constants.SYS_DEFAULT_NAMESPACE_ID;
+        }
+        this.namespace = Lists.newArrayList(StringUtils.split(namespace, 
Constants.SEPARATOR_CHARS));
     }
 
     @Override
     public void onApplicationEvent(final ContextRefreshedEvent event) {
-        
httpClientRegisterRepository.doPersistDiscoveryConfig(buildDiscoveryConfigRegisterDTO(shenyuDiscoveryConfig));
+        List<String> namespaceIds = this.getNamespace();
+        namespaceIds.forEach(namespaceId -> {
+            DiscoveryConfigRegisterDTO discoveryConfigRegisterDTO = 
buildDiscoveryConfigRegisterDTO(shenyuDiscoveryConfig, namespaceId);
+            
httpClientRegisterRepository.doPersistDiscoveryConfig(discoveryConfigRegisterDTO);
+        });
+
     }
 
-    protected DiscoveryConfigRegisterDTO buildDiscoveryConfigRegisterDTO(final 
ShenyuDiscoveryConfig shenyuDiscoveryConfig) {
+    protected DiscoveryConfigRegisterDTO buildDiscoveryConfigRegisterDTO(final 
ShenyuDiscoveryConfig shenyuDiscoveryConfig, final String namespaceId) {
         if (StringUtils.isEmpty(shenyuDiscoveryConfig.getServerList())) {
             LOG.error("If using service discovery. The configuration 
shenyu.discovery.name in xml/yml cannot be null");
             throw new ShenyuException("The configuration 
shenyu.discovery.serverList in xml/yml cannot be null");
@@ -74,6 +96,7 @@ public final class 
ClientDiscoveryConfigRefreshedEventListener implements Applic
                 .props(shenyuDiscoveryConfig.getProps())
                 .discoveryType(shenyuDiscoveryConfig.getType())
                 .pluginName(plugin.getName())
+                .namespaceId(namespaceId)
                 .build();
     }
 
@@ -81,6 +104,10 @@ public final class 
ClientDiscoveryConfigRefreshedEventListener implements Applic
         return "default_" + shenyuDiscoveryConfig.getType();
     }
 
+    public List<String> getNamespace() {
+        return namespace;
+    }
+
     @Override
     public int getOrder() {
         return Ordered.LOWEST_PRECEDENCE;
diff --git 
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/DiscoverySyncData.java
 
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/DiscoverySyncData.java
index 0f5526b2db..9d9c92f794 100644
--- 
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/DiscoverySyncData.java
+++ 
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/DiscoverySyncData.java
@@ -41,6 +41,11 @@ public class DiscoverySyncData {
      */
     private List<DiscoveryUpstreamData> upstreamDataList;
 
+    /**
+     * namespaceId.
+     */
+    private String namespaceId;
+
     /**
      * getSelectorId.
      *
@@ -114,4 +119,22 @@ public class DiscoverySyncData {
         this.upstreamDataList = upstreamDataList;
     }
 
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
+
 }
diff --git 
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/DiscoveryUpstreamData.java
 
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/DiscoveryUpstreamData.java
index 8741c745c4..f63ab53733 100644
--- 
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/DiscoveryUpstreamData.java
+++ 
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/DiscoveryUpstreamData.java
@@ -72,6 +72,11 @@ public class DiscoveryUpstreamData {
      */
     private String props;
 
+    /**
+     * namespaceId.
+     */
+    private String namespaceId;
+
 
     /**
      * getDiscoveryHandlerId.
@@ -235,6 +240,24 @@ public class DiscoveryUpstreamData {
         this.dateUpdated = dateUpdated;
     }
 
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
+
     @Override
     public boolean equals(final Object o) {
         if (this == o) {
@@ -247,12 +270,13 @@ public class DiscoveryUpstreamData {
         return status == that.status && weight == that.weight && 
Objects.equals(id, that.id)
                 && Objects.equals(dateCreated, that.dateCreated) && 
Objects.equals(dateUpdated, that.dateUpdated)
                 && Objects.equals(discoveryHandlerId, that.discoveryHandlerId) 
&& Objects.equals(protocol, that.protocol)
-                && Objects.equals(url, that.url) && Objects.equals(props, 
that.props);
+                && Objects.equals(url, that.url) && Objects.equals(props, 
that.props)
+                && Objects.equals(namespaceId, that.namespaceId);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(id, dateCreated, dateUpdated, discoveryHandlerId, 
protocol, url, status, weight, props);
+        return Objects.hash(id, dateCreated, dateUpdated, discoveryHandlerId, 
protocol, url, status, weight, props, namespaceId);
     }
 
     /**
@@ -284,6 +308,8 @@ public class DiscoveryUpstreamData {
 
         private String props;
 
+        private String namespaceId;
+
         private Builder() {
         }
 
@@ -395,6 +421,17 @@ public class DiscoveryUpstreamData {
             return this;
         }
 
+        /**
+         * build namespaceId.
+         *
+         * @param namespaceId namespaceId
+         * @return this
+         */
+        public Builder namespaceId(final String namespaceId) {
+            this.namespaceId = namespaceId;
+            return this;
+        }
+
         /**
          * build new Object.
          *
@@ -411,6 +448,7 @@ public class DiscoveryUpstreamData {
             discoveryUpstreamData.setStatus(status);
             discoveryUpstreamData.setWeight(weight);
             discoveryUpstreamData.setProps(props);
+            discoveryUpstreamData.setNamespaceId(namespaceId);
             return discoveryUpstreamData;
         }
     }
diff --git 
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/CommonUpstream.java
 
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/CommonUpstream.java
index 17bf601727..10e3a18de8 100644
--- 
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/CommonUpstream.java
+++ 
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/CommonUpstream.java
@@ -49,6 +49,11 @@ public class CommonUpstream {
      */
     private long timestamp;
 
+    /**
+     * namespaceId.
+     */
+    private String namespaceId;
+
     /**
      * Instantiates a new Common upstream.
      */
@@ -172,6 +177,24 @@ public class CommonUpstream {
         return true;
     }
 
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
+
     @Override
     public boolean equals(final Object o) {
         if (this == o) {
@@ -181,12 +204,15 @@ public class CommonUpstream {
             return false;
         }
         CommonUpstream that = (CommonUpstream) o;
-        return Objects.equals(upstreamHost, that.upstreamHost) && 
Objects.equals(protocol, that.protocol) && Objects.equals(upstreamUrl, 
that.upstreamUrl);
+        return Objects.equals(upstreamHost, that.upstreamHost)
+                && Objects.equals(protocol, that.protocol)
+                && Objects.equals(upstreamUrl, that.upstreamUrl)
+                && Objects.equals(namespaceId, that.namespaceId);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(upstreamHost, protocol, upstreamUrl);
+        return Objects.hash(upstreamHost, protocol, upstreamUrl, namespaceId);
     }
 
     @Override
@@ -205,6 +231,8 @@ public class CommonUpstream {
                 + status
                 + ", timestamp="
                 + timestamp
+                + ", namespaceId="
+                + namespaceId
                 + '}';
     }
 }
diff --git 
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/DivideUpstream.java
 
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/DivideUpstream.java
index 1a9bfd91be..266995705f 100644
--- 
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/DivideUpstream.java
+++ 
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/DivideUpstream.java
@@ -57,6 +57,7 @@ public class DivideUpstream extends CommonUpstream {
         setStatus(statusValue);
         setTimestamp(builder.timestamp);
         this.warmup = builder.warmup;
+        setNamespaceId(builder.namespaceId);
     }
 
     /**
@@ -113,12 +114,15 @@ public class DivideUpstream extends CommonUpstream {
             return false;
         }
         DivideUpstream that = (DivideUpstream) o;
-        return Objects.equals(getUpstreamHost(), that.getUpstreamHost()) && 
Objects.equals(getProtocol(), that.getProtocol()) && 
Objects.equals(getUpstreamUrl(), that.getUpstreamUrl());
+        return Objects.equals(getUpstreamHost(), that.getUpstreamHost())
+                && Objects.equals(getProtocol(), that.getProtocol())
+                && Objects.equals(getUpstreamUrl(), that.getUpstreamUrl())
+                && Objects.equals(getNamespaceId(), that.getNamespaceId());
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(getUpstreamHost(), getProtocol(), 
getUpstreamUrl());
+        return Objects.hash(getUpstreamHost(), getProtocol(), 
getUpstreamUrl(), getNamespaceId());
     }
 
     @Override
@@ -141,6 +145,8 @@ public class DivideUpstream extends CommonUpstream {
                 + getTimestamp()
                 + ", warmup="
                 + warmup
+                + ", namespaceId="
+                + getNamespaceId()
                 + '}';
     }
 
@@ -188,7 +194,12 @@ public class DivideUpstream extends CommonUpstream {
          * warmup.
          */
         private int warmup;
-        
+
+        /**
+         * namespaceId.
+         */
+        private String namespaceId;
+
         /**
          * no args constructor.
          */
@@ -281,5 +292,16 @@ public class DivideUpstream extends CommonUpstream {
             this.warmup = warmup;
             return this;
         }
+
+        /**
+         * build namespaceId.
+         *
+         * @param namespaceId namespaceId
+         * @return this
+         */
+        public Builder namespaceId(final String namespaceId) {
+            this.namespaceId = namespaceId;
+            return this;
+        }
     }
 }
diff --git 
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/GrpcUpstream.java
 
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/GrpcUpstream.java
index 1573739d7d..66917362d5 100644
--- 
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/GrpcUpstream.java
+++ 
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/GrpcUpstream.java
@@ -45,6 +45,7 @@ public final class GrpcUpstream extends CommonUpstream {
         this.weight = builder.weight;
         setStatus(statusValue);
         setTimestamp(builder.timestamp);
+        setNamespaceId(builder.namespaceId);
     }
 
     /**
@@ -83,12 +84,15 @@ public final class GrpcUpstream extends CommonUpstream {
             return false;
         }
         GrpcUpstream that = (GrpcUpstream) o;
-        return Objects.equals(getUpstreamHost(), that.getUpstreamHost()) && 
Objects.equals(getProtocol(), that.getProtocol()) && 
Objects.equals(getUpstreamUrl(), that.getUpstreamUrl());
+        return Objects.equals(getUpstreamHost(), that.getUpstreamHost())
+                && Objects.equals(getProtocol(), that.getProtocol())
+                && Objects.equals(getUpstreamUrl(), that.getUpstreamUrl())
+                && Objects.equals(getNamespaceId(), that.getNamespaceId());
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(getUpstreamHost(), getProtocol(), 
getUpstreamUrl());
+        return Objects.hash(getUpstreamHost(), getProtocol(), 
getUpstreamUrl(), getNamespaceId());
     }
 
     @Override
@@ -109,6 +113,8 @@ public final class GrpcUpstream extends CommonUpstream {
                 + isStatus()
                 + ", timestamp="
                 + getTimestamp()
+                + ", namespaceId="
+                + getNamespaceId()
                 + '}';
     }
 
@@ -152,6 +158,11 @@ public final class GrpcUpstream extends CommonUpstream {
          */
         private long timestamp;
 
+        /**
+         * namespaceId.
+         */
+        private String namespaceId;
+
         /**
          * no args constructor.
          */
@@ -233,5 +244,16 @@ public final class GrpcUpstream extends CommonUpstream {
             this.timestamp = timestamp;
             return this;
         }
+
+        /**
+         * build namespaceId.
+         *
+         * @param namespaceId namespaceId
+         * @return this
+         */
+        public Builder namespaceId(final String namespaceId) {
+            this.namespaceId = namespaceId;
+            return this;
+        }
     }
 }
diff --git 
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/WebSocketUpstream.java
 
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/WebSocketUpstream.java
index 759b81192c..419bb15021 100644
--- 
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/WebSocketUpstream.java
+++ 
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/selector/WebSocketUpstream.java
@@ -59,6 +59,7 @@ public final class WebSocketUpstream extends CommonUpstream {
         setStatus(builder.status);
         setTimestamp(builder.timestamp);
         this.warmup = builder.warmup;
+        setNamespaceId(builder.namespaceId);
     }
 
     /**
@@ -141,7 +142,7 @@ public final class WebSocketUpstream extends CommonUpstream 
{
     public void setWarmup(final int warmup) {
         this.warmup = warmup;
     }
-    
+
     @Override
     public boolean equals(final Object o) {
         if (this == o) {
@@ -151,12 +152,12 @@ public final class WebSocketUpstream extends 
CommonUpstream {
             return false;
         }
         WebSocketUpstream that = (WebSocketUpstream) o;
-        return Objects.equals(host, that.host) && 
Objects.equals(getProtocol(), that.getProtocol()) && Objects.equals(url, 
that.url);
+        return Objects.equals(host, that.host) && 
Objects.equals(getProtocol(), that.getProtocol()) && Objects.equals(url, 
that.url) && Objects.equals(getNamespaceId(), that.getNamespaceId());
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(host, getProtocol(), url);
+        return Objects.hash(host, getProtocol(), url, getNamespaceId());
     }
 
     @Override
@@ -179,9 +180,11 @@ public final class WebSocketUpstream extends 
CommonUpstream {
                 + getTimestamp()
                 + ", warmup="
                 + warmup
+                + ", namespaceId="
+                + getNamespaceId()
                 + '}';
     }
-    
+
 
     /**
      * class builder.
@@ -212,7 +215,7 @@ public final class WebSocketUpstream extends CommonUpstream 
{
          * status.
          */
         private boolean status;
-        
+
 
         /**
          * timestamp.
@@ -224,6 +227,11 @@ public final class WebSocketUpstream extends 
CommonUpstream {
          */
         private int warmup;
 
+        /**
+         * namespaceId.
+         */
+        private String namespaceId;
+
         /**
          * no args constructor.
          */
@@ -315,5 +323,16 @@ public final class WebSocketUpstream extends 
CommonUpstream {
             this.warmup = warmup;
             return this;
         }
+
+        /**
+         * build namespaceId.
+         *
+         * @param namespaceId namespaceId
+         * @return this
+         */
+        public Builder namespaceId(final String namespaceId) {
+            this.namespaceId = namespaceId;
+            return this;
+        }
     }
 }
diff --git 
a/shenyu-e2e/shenyu-e2e-case/shenyu-e2e-case-storage/src/test/java/org/apache/shenyu/e2e/testcase/divide/DividePluginTest.java
 
b/shenyu-e2e/shenyu-e2e-case/shenyu-e2e-case-storage/src/test/java/org/apache/shenyu/e2e/testcase/divide/DividePluginTest.java
index e7f97eac81..43896d5055 100644
--- 
a/shenyu-e2e/shenyu-e2e-case/shenyu-e2e-case-storage/src/test/java/org/apache/shenyu/e2e/testcase/divide/DividePluginTest.java
+++ 
b/shenyu-e2e/shenyu-e2e-case/shenyu-e2e-case-storage/src/test/java/org/apache/shenyu/e2e/testcase/divide/DividePluginTest.java
@@ -38,6 +38,8 @@ import org.junit.jupiter.api.BeforeEach;
 import java.util.List;
 import java.util.Objects;
 
+import static 
org.apache.shenyu.e2e.constant.Constants.SYS_DEFAULT_NAMESPACE_NAMESPACE_ID;
+
 @ShenYuTest(environments = {
         @ShenYuTest.Environment(
                 serviceName = "shenyu-e2e-admin",
@@ -83,6 +85,7 @@ public class DividePluginTest {
             BindingData bindingData = res.getBindingData();
             if (Objects.nonNull(bindingData)) {
                 bindingData.setSelectorId(dto.getId());
+                bindingData.setNamespaceId(SYS_DEFAULT_NAMESPACE_NAMESPACE_ID);
                 client.bindingData(bindingData);
             }
         }
diff --git 
a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/AdminClient.java
 
b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/AdminClient.java
index 2a91228d92..cee6b43a4d 100644
--- 
a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/AdminClient.java
+++ 
b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/AdminClient.java
@@ -334,6 +334,7 @@ public class AdminClient extends BaseClient {
      * @return RuleDTO
      */
     public RuleDTO create(final RuleData rule) {
+        rule.setNamespaceId(SYS_DEFAULT_NAMESPACE_NAMESPACE_ID);
         rule.setNamespaceId(SYS_DEFAULT_NAMESPACE_NAMESPACE_ID);
         RuleDTO dto = create("/rule", rule);
         Rules.INSTANCE.put(rule.getName(), dto.getId());
@@ -377,6 +378,7 @@ public class AdminClient extends BaseClient {
      * @param bindingData bindingData
      */
     public void bindingData(final BindingData bindingData) {
+        bindingData.setNamespaceId(SYS_DEFAULT_NAMESPACE_NAMESPACE_ID);
         HttpEntity<BindingData> entity = new HttpEntity<>(bindingData, 
basicAuth);
         ResponseEntity<ShenYuResult> response = template.postForEntity(baseURL 
+ "/proxy-selector/binding", entity, ShenYuResult.class);
         Assertions.assertEquals(HttpStatus.OK, response.getStatusCode(), 
"status code");
diff --git 
a/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/model/data/BindingData.java
 
b/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/model/data/BindingData.java
index 88635b5fd7..3505eab9a4 100644
--- 
a/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/model/data/BindingData.java
+++ 
b/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/model/data/BindingData.java
@@ -37,6 +37,8 @@ public class BindingData implements ResourceData {
 
     private List<DiscoveryUpstream> discoveryUpstreams;
 
+    private String namespaceId;
+
     @Override
     public String getId() {
         return id;
@@ -177,6 +179,24 @@ public class BindingData implements ResourceData {
         this.discoveryUpstreams = discoveryUpstreams;
     }
 
+    /**
+     * get namespaceId.
+     *
+     * @return namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * set namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
+
     public static class Discovery {
 
         /**
diff --git 
a/shenyu-register-center/shenyu-register-common/src/main/java/org/apache/shenyu/register/common/dto/DiscoveryConfigRegisterDTO.java
 
b/shenyu-register-center/shenyu-register-common/src/main/java/org/apache/shenyu/register/common/dto/DiscoveryConfigRegisterDTO.java
index 244eb4d089..0ab8ba0bbd 100644
--- 
a/shenyu-register-center/shenyu-register-common/src/main/java/org/apache/shenyu/register/common/dto/DiscoveryConfigRegisterDTO.java
+++ 
b/shenyu-register-center/shenyu-register-common/src/main/java/org/apache/shenyu/register/common/dto/DiscoveryConfigRegisterDTO.java
@@ -40,6 +40,8 @@ public class DiscoveryConfigRegisterDTO implements 
DataTypeParent {
 
     private Properties props;
 
+    private String namespaceId;
+
     public DiscoveryConfigRegisterDTO() {
     }
 
@@ -64,6 +66,7 @@ public class DiscoveryConfigRegisterDTO implements 
DataTypeParent {
         pluginName = builder.pluginName;
         listenerNode = builder.listenerNode;
         handler = builder.handler;
+        namespaceId = builder.namespaceId;
     }
 
     @Override
@@ -225,6 +228,24 @@ public class DiscoveryConfigRegisterDTO implements 
DataTypeParent {
         this.listenerNode = listenerNode;
     }
 
+    /**
+     * Gets the value of namespaceId.
+     *
+     * @return the value of namespaceId
+     */
+    public String getNamespaceId() {
+        return namespaceId;
+    }
+
+    /**
+     * Sets the namespaceId.
+     *
+     * @param namespaceId namespaceId
+     */
+    public void setNamespaceId(final String namespaceId) {
+        this.namespaceId = namespaceId;
+    }
+
     public static final class Builder {
 
         private String selectorName;
@@ -243,6 +264,8 @@ public class DiscoveryConfigRegisterDTO implements 
DataTypeParent {
 
         private Properties props;
 
+        private String namespaceId;
+
         private Builder() {
         }
 
@@ -337,6 +360,17 @@ public class DiscoveryConfigRegisterDTO implements 
DataTypeParent {
             return this;
         }
 
+        /**
+         * namespaceId.
+         *
+         * @param namespaceId namespaceId
+         * @return SelectorDOBuilder
+         */
+        public Builder namespaceId(final String namespaceId) {
+            this.namespaceId = namespaceId;
+            return this;
+        }
+
         /**
          * build.
          *
diff --git 
a/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-grpc/src/main/java/org/apache/springboot/starter/client/grpc/ShenyuGrpcDiscoveryConfiguration.java
 
b/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-grpc/src/main/java/org/apache/springboot/starter/client/grpc/ShenyuGrpcDiscoveryConfiguration.java
index 6a46398aae..8d1fb7140f 100644
--- 
a/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-grpc/src/main/java/org/apache/springboot/starter/client/grpc/ShenyuGrpcDiscoveryConfiguration.java
+++ 
b/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-grpc/src/main/java/org/apache/springboot/starter/client/grpc/ShenyuGrpcDiscoveryConfiguration.java
@@ -24,6 +24,7 @@ import 
org.apache.shenyu.client.core.register.InstanceRegisterListener;
 import org.apache.shenyu.common.dto.DiscoveryUpstreamData;
 import org.apache.shenyu.common.enums.PluginEnum;
 import org.apache.shenyu.register.client.http.HttpClientRegisterRepository;
+import org.apache.shenyu.register.common.config.ShenyuClientConfig;
 import org.apache.shenyu.register.common.config.ShenyuDiscoveryConfig;
 import 
org.apache.shenyu.springboot.starter.client.common.config.ShenyuClientCommonBeanConfiguration;
 import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
@@ -43,16 +44,20 @@ public class ShenyuGrpcDiscoveryConfiguration {
      *
      * @param clientRegisterConfig  clientRegisterConfig
      * @param shenyuDiscoveryConfig shenyuDiscoveryConfig
+     * @param shenyuClientConfig    shenyuClientConfig
      * @return InstanceRegisterListener
      */
     @Bean("grpcInstanceRegisterListener")
     @ConditionalOnBean(ShenyuDiscoveryConfig.class)
-    public InstanceRegisterListener instanceRegisterListener(final 
ClientRegisterConfig clientRegisterConfig, final ShenyuDiscoveryConfig 
shenyuDiscoveryConfig) {
+    public InstanceRegisterListener instanceRegisterListener(final 
ClientRegisterConfig clientRegisterConfig,
+                                                             final 
ShenyuDiscoveryConfig shenyuDiscoveryConfig,
+                                                             final 
ShenyuClientConfig shenyuClientConfig) {
         DiscoveryUpstreamData discoveryUpstreamData = new 
DiscoveryUpstreamData();
         discoveryUpstreamData.setUrl(clientRegisterConfig.getHost() + ":" + 
clientRegisterConfig.getPort());
         discoveryUpstreamData.setStatus(0);
         discoveryUpstreamData.setWeight(50);
         
discoveryUpstreamData.setProtocol(Optional.ofNullable(shenyuDiscoveryConfig.getProtocol()).orElse(ShenyuClientConstants.HTTP));
+        
discoveryUpstreamData.setNamespaceId(shenyuClientConfig.getNamespace());
         return new InstanceRegisterListener(discoveryUpstreamData, 
shenyuDiscoveryConfig);
     }
 
@@ -62,6 +67,7 @@ public class ShenyuGrpcDiscoveryConfiguration {
      * @param shenyuDiscoveryConfig        shenyuDiscoveryConfig
      * @param httpClientRegisterRepository httpClientRegisterRepository
      * @param clientRegisterConfig         clientRegisterConfig
+     * @param shenyuClientConfig           shenyuClientConfig
      * @return ClientDiscoveryConfigRefreshedEventListener
      */
     @Bean("GrpcClientDiscoveryConfigRefreshedEventListener")
@@ -69,8 +75,9 @@ public class ShenyuGrpcDiscoveryConfiguration {
     @ConditionalOnBean(ShenyuDiscoveryConfig.class)
     public ClientDiscoveryConfigRefreshedEventListener 
clientDiscoveryConfigRefreshedEventListener(final ShenyuDiscoveryConfig 
shenyuDiscoveryConfig,
                                                                                
                    final HttpClientRegisterRepository 
httpClientRegisterRepository,
-                                                                               
                    final ClientRegisterConfig clientRegisterConfig) {
-        return new 
ClientDiscoveryConfigRefreshedEventListener(shenyuDiscoveryConfig, 
httpClientRegisterRepository, clientRegisterConfig, PluginEnum.GRPC);
+                                                                               
                    final ClientRegisterConfig clientRegisterConfig,
+                                                                               
                    final ShenyuClientConfig shenyuClientConfig) {
+        return new 
ClientDiscoveryConfigRefreshedEventListener(shenyuDiscoveryConfig, 
httpClientRegisterRepository, clientRegisterConfig, PluginEnum.GRPC, 
shenyuClientConfig);
     }
 
 }
diff --git 
a/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-spring-websocket/src/main/java/org/apache/shenyu/springboot/starter/client/spring/websocket/ShenyuSpringWebSocketDiscoveryConfiguration.java
 
b/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-spring-websocket/src/main/java/org/apache/shenyu/springboot/starter/client/spring/websocket/ShenyuSpringWebSocketDiscoveryConfiguration.java
index 3d1c057213..99e2baeda0 100644
--- 
a/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-spring-websocket/src/main/java/org/apache/shenyu/springboot/starter/client/spring/websocket/ShenyuSpringWebSocketDiscoveryConfiguration.java
+++ 
b/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-spring-websocket/src/main/java/org/apache/shenyu/springboot/starter/client/spring/websocket/ShenyuSpringWebSocketDiscoveryConfiguration.java
@@ -25,6 +25,7 @@ import 
org.apache.shenyu.client.spring.websocket.init.SpringWebSocketClientEvent
 import org.apache.shenyu.common.dto.DiscoveryUpstreamData;
 import org.apache.shenyu.common.enums.PluginEnum;
 import org.apache.shenyu.register.client.http.HttpClientRegisterRepository;
+import org.apache.shenyu.register.common.config.ShenyuClientConfig;
 import org.apache.shenyu.register.common.config.ShenyuDiscoveryConfig;
 import 
org.apache.shenyu.springboot.starter.client.common.config.ShenyuClientCommonBeanConfiguration;
 import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
@@ -43,6 +44,7 @@ public class ShenyuSpringWebSocketDiscoveryConfiguration {
      * @param shenyuDiscoveryConfig        shenyuDiscoveryConfig
      * @param httpClientRegisterRepository httpClientRegisterRepository
      * @param clientRegisterConfig         clientRegisterConfig
+     * @param shenyuClientConfig           shenyuClientConfig
      * @return ClientDiscoveryConfigRefreshedEventListener
      */
     @Bean("WebSocketClientDiscoveryConfigRefreshedEventListener")
@@ -50,8 +52,9 @@ public class ShenyuSpringWebSocketDiscoveryConfiguration {
     @ConditionalOnBean(ShenyuDiscoveryConfig.class)
     public ClientDiscoveryConfigRefreshedEventListener 
clientDiscoveryConfigRefreshedEventListener(final ShenyuDiscoveryConfig 
shenyuDiscoveryConfig,
                                                                                
                    final HttpClientRegisterRepository 
httpClientRegisterRepository,
-                                                                               
                    final ClientRegisterConfig clientRegisterConfig) {
-        return new 
ClientDiscoveryConfigRefreshedEventListener(shenyuDiscoveryConfig, 
httpClientRegisterRepository, clientRegisterConfig, PluginEnum.WEB_SOCKET);
+                                                                               
                    final ClientRegisterConfig clientRegisterConfig,
+                                                                               
                    final ShenyuClientConfig shenyuClientConfig) {
+        return new 
ClientDiscoveryConfigRefreshedEventListener(shenyuDiscoveryConfig, 
httpClientRegisterRepository, clientRegisterConfig, PluginEnum.WEB_SOCKET, 
shenyuClientConfig);
     }
 
     /**
@@ -59,16 +62,20 @@ public class ShenyuSpringWebSocketDiscoveryConfiguration {
      *
      * @param eventListener         eventListener
      * @param shenyuDiscoveryConfig discoveryConfig
+     * @param shenyuClientConfig    shenyuClientConfig
      * @return InstanceRegisterListener
      */
     @Bean("websocketInstanceRegisterListener")
     @ConditionalOnBean(ShenyuDiscoveryConfig.class)
-    public InstanceRegisterListener instanceRegisterListener(final 
SpringWebSocketClientEventListener eventListener, final ShenyuDiscoveryConfig 
shenyuDiscoveryConfig) {
+    public InstanceRegisterListener instanceRegisterListener(final 
SpringWebSocketClientEventListener eventListener,
+                                                             final 
ShenyuDiscoveryConfig shenyuDiscoveryConfig,
+                                                             final 
ShenyuClientConfig shenyuClientConfig) {
         DiscoveryUpstreamData discoveryUpstreamData = new 
DiscoveryUpstreamData();
         discoveryUpstreamData.setProtocol(ShenyuClientConstants.WS);
         discoveryUpstreamData.setStatus(0);
         discoveryUpstreamData.setWeight(50);
         discoveryUpstreamData.setUrl(eventListener.getHost() + ":" + 
eventListener.getPort());
+        
discoveryUpstreamData.setNamespaceId(shenyuClientConfig.getNamespace());
         return new InstanceRegisterListener(discoveryUpstreamData, 
shenyuDiscoveryConfig);
     }
 
diff --git 
a/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-springmvc/src/main/java/org/apache/shenyu/springboot/starter/client/springmvc/ShenyuSpringMvcDiscoveryConfiguration.java
 
b/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-springmvc/src/main/java/org/apache/shenyu/springboot/starter/client/springmvc/ShenyuSpringMvcDiscoveryConfiguration.java
index 8c070ed96c..61a49307e2 100644
--- 
a/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-springmvc/src/main/java/org/apache/shenyu/springboot/starter/client/springmvc/ShenyuSpringMvcDiscoveryConfiguration.java
+++ 
b/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-springmvc/src/main/java/org/apache/shenyu/springboot/starter/client/springmvc/ShenyuSpringMvcDiscoveryConfiguration.java
@@ -24,6 +24,7 @@ import 
org.apache.shenyu.client.core.register.InstanceRegisterListener;
 import org.apache.shenyu.common.dto.DiscoveryUpstreamData;
 import org.apache.shenyu.common.enums.PluginEnum;
 import org.apache.shenyu.register.client.http.HttpClientRegisterRepository;
+import org.apache.shenyu.register.common.config.ShenyuClientConfig;
 import org.apache.shenyu.register.common.config.ShenyuDiscoveryConfig;
 import 
org.apache.shenyu.springboot.starter.client.common.config.ShenyuClientCommonBeanConfiguration;
 import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
@@ -47,6 +48,7 @@ public class ShenyuSpringMvcDiscoveryConfiguration {
      * @param shenyuDiscoveryConfig        shenyuDiscoveryConfig
      * @param httpClientRegisterRepository httpClientRegisterRepository
      * @param clientRegisterConfig         clientRegisterConfig
+     * @param shenyuClientConfig           shenyuClientConfig
      * @return ClientDiscoveryConfigRefreshedEventListener
      */
     @Bean("SpringMvcClientDiscoveryConfigRefreshedEventListener")
@@ -54,8 +56,9 @@ public class ShenyuSpringMvcDiscoveryConfiguration {
     @ConditionalOnBean(ShenyuDiscoveryConfig.class)
     public ClientDiscoveryConfigRefreshedEventListener 
clientDiscoveryConfigRefreshedEventListener(final ShenyuDiscoveryConfig 
shenyuDiscoveryConfig,
                                                                                
                    final HttpClientRegisterRepository 
httpClientRegisterRepository,
-                                                                               
                    final ClientRegisterConfig clientRegisterConfig) {
-        return new 
ClientDiscoveryConfigRefreshedEventListener(shenyuDiscoveryConfig, 
httpClientRegisterRepository, clientRegisterConfig, PluginEnum.DIVIDE);
+                                                                               
                    final ClientRegisterConfig clientRegisterConfig,
+                                                                               
                    final ShenyuClientConfig shenyuClientConfig) {
+        return new 
ClientDiscoveryConfigRefreshedEventListener(shenyuDiscoveryConfig, 
httpClientRegisterRepository, clientRegisterConfig, PluginEnum.DIVIDE, 
shenyuClientConfig);
     }
 
     /**
@@ -63,17 +66,21 @@ public class ShenyuSpringMvcDiscoveryConfiguration {
      *
      * @param clientRegisterConfig  clientRegisterConfig
      * @param shenyuDiscoveryConfig shenyuDiscoveryConfig
+     * @param shenyuClientConfig    shenyuClientConfig
      * @return InstanceRegisterListener
      */
     @Bean("springmvcInstanceRegisterListener")
     @ConditionalOnBean(ShenyuDiscoveryConfig.class)
     @Primary
-    public InstanceRegisterListener instanceRegisterListener(final 
ClientRegisterConfig clientRegisterConfig, final ShenyuDiscoveryConfig 
shenyuDiscoveryConfig) {
+    public InstanceRegisterListener instanceRegisterListener(final 
ClientRegisterConfig clientRegisterConfig,
+                                                             final 
ShenyuDiscoveryConfig shenyuDiscoveryConfig,
+                                                             final 
ShenyuClientConfig shenyuClientConfig) {
         DiscoveryUpstreamData discoveryUpstreamData = new 
DiscoveryUpstreamData();
         discoveryUpstreamData.setUrl(clientRegisterConfig.getHost() + ":" + 
clientRegisterConfig.getPort());
         discoveryUpstreamData.setStatus(0);
         discoveryUpstreamData.setWeight(50);
         
discoveryUpstreamData.setProtocol(Optional.ofNullable(shenyuDiscoveryConfig.getProtocol()).orElse(ShenyuClientConstants.HTTP));
+        
discoveryUpstreamData.setNamespaceId(shenyuClientConfig.getNamespace());
         return new InstanceRegisterListener(discoveryUpstreamData, 
shenyuDiscoveryConfig);
     }
 

Reply via email to