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); }