You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2021/11/23 03:12:19 UTC
[dubbo] 04/05: refactor
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 3.0-metadata-refactor
in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 71cb0e2ee32ae3010db33e0c88f92958db7c5e1e
Author: ken.lj <ke...@gmail.com>
AuthorDate: Fri Nov 19 11:34:13 2021 +0800
refactor
---
.../config/deploy/DefaultApplicationDeployer.java | 26 ++---
.../ConfigurableMetadataServiceExporter.java | 117 +++++++--------------
.../metadata}/MetadataServiceDelegation.java | 30 +++---
...MetadataServiceURLParamsMetadataCustomizer.java | 24 +++--
...g.apache.dubbo.metadata.MetadataServiceExporter | 2 -
...dubbo.registry.client.ServiceInstanceCustomizer | 3 +-
.../dubbo/config/bootstrap/DubboBootstrapTest.java | 4 +-
...dataServiceURLParamsMetadataCustomizerTest.java | 7 +-
...terServiceDiscoveryRegistryIntegrationTest.java | 10 +-
...ceDiscoveryRegistryRegistryServiceListener.java | 2 +-
.../ServiceDiscoveryRegistryInfoWrapper.java | 3 +-
...RegistryCenterDubboProtocolIntegrationTest.java | 2 +-
.../metadata/MetadataServiceExporterTest.java | 41 ++++----
dubbo-distribution/dubbo-all/pom.xml | 6 --
dubbo-distribution/dubbo-core-spi/pom.xml | 6 --
.../org/apache/dubbo/metadata/MetadataService.java | 2 +
.../dubbo/metadata/MetadataServiceExporter.java | 101 ------------------
.../apache/dubbo/metadata/MetadataServiceType.java | 72 -------------
.../metadata/report/MetadataReportInstance.java | 24 ++++-
.../metadata/report/support/NopMetadataReport.java | 78 ++++++++++++++
.../dubbo/metadata/MetadataServiceTypeTest.java | 48 ---------
.../report/MetadataReportInstanceTest.java | 3 +-
.../registry/RegistryScopeModelInitializer.java | 2 -
.../registry/client/AbstractServiceDiscovery.java | 13 ++-
...dubbo.registry.client.ServiceInstanceCustomizer | 1 -
.../ProtocolPortsMetadataCustomizerTest.java | 5 +-
.../ServiceInstanceMetadataCustomizerTest.java | 7 +-
27 files changed, 240 insertions(+), 399 deletions(-)
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
index a8a586f..c830975 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
@@ -42,10 +42,11 @@ import org.apache.dubbo.config.DubboShutdownHook;
import org.apache.dubbo.config.MetadataReportConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.context.ConfigManager;
+import org.apache.dubbo.config.metadata.ConfigurableMetadataServiceExporter;
+import org.apache.dubbo.config.metadata.MetadataServiceDelegation;
import org.apache.dubbo.config.utils.CompositeReferenceCache;
import org.apache.dubbo.config.utils.ConfigValidationUtils;
import org.apache.dubbo.metadata.MetadataService;
-import org.apache.dubbo.metadata.MetadataServiceExporter;
import org.apache.dubbo.metadata.report.MetadataReportFactory;
import org.apache.dubbo.metadata.report.MetadataReportInstance;
import org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils;
@@ -97,20 +98,18 @@ public class DefaultApplicationDeployer extends AbstractDeployer<ApplicationMode
private final ExecutorRepository executorRepository;
- private AtomicBoolean hasPreparedApplicationInstance = new AtomicBoolean(false);
- private AtomicBoolean hasPreparedInternalModule = new AtomicBoolean(false);
+ private final AtomicBoolean hasPreparedApplicationInstance = new AtomicBoolean(false);
+ private final AtomicBoolean hasPreparedInternalModule = new AtomicBoolean(false);
- private volatile MetadataService metadataService;
-
- private volatile MetadataServiceExporter metadataServiceExporter;
+ private volatile ConfigurableMetadataServiceExporter metadataServiceExporter;
private ScheduledFuture<?> asyncMetadataFuture;
- private volatile CompletableFuture startFuture;
- private DubboShutdownHook dubboShutdownHook;
- private Object stateLock = new Object();
- private Object startLock = new Object();
- private Object destroyLock = new Object();
- private Object internalModuleLock = new Object();
+ private volatile CompletableFuture<Boolean> startFuture;
+ private final DubboShutdownHook dubboShutdownHook;
+ private final Object stateLock = new Object();
+ private final Object startLock = new Object();
+ private final Object destroyLock = new Object();
+ private final Object internalModuleLock = new Object();
public DefaultApplicationDeployer(ApplicationModel applicationModel) {
super(applicationModel);
@@ -499,7 +498,8 @@ public class DefaultApplicationDeployer extends AbstractDeployer<ApplicationMode
* Initialize {@link MetadataService}
*/
private void initMetadataService() {
- this.metadataServiceExporter = getExtensionLoader(MetadataServiceExporter.class).getDefaultExtension();
+ MetadataServiceDelegation metadataService = applicationModel.getBeanFactory().getOrRegisterBean(MetadataServiceDelegation.class);
+ this.metadataServiceExporter = new ConfigurableMetadataServiceExporter(applicationModel, metadataService);
}
/**
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
index a9510b6..e0e8642 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
@@ -25,13 +25,10 @@ import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
-import org.apache.dubbo.config.context.ConfigManager;
import org.apache.dubbo.metadata.MetadataService;
-import org.apache.dubbo.metadata.MetadataServiceExporter;
import org.apache.dubbo.rpc.Protocol;
import org.apache.dubbo.rpc.ProtocolServer;
import org.apache.dubbo.rpc.model.ApplicationModel;
-import org.apache.dubbo.rpc.model.ScopeModelAware;
import java.util.Iterator;
import java.util.List;
@@ -43,70 +40,32 @@ import static org.apache.dubbo.common.constants.CommonConstants.METADATA_SERVICE
import static org.apache.dubbo.common.constants.CommonConstants.METADATA_SERVICE_PROTOCOL_KEY;
/**
- * {@link MetadataServiceExporter} implementation based on {@link ConfigManager Dubbo configurations}, the clients
- * should make sure the {@link ApplicationConfig}, {@link RegistryConfig} and {@link ProtocolConfig} are ready before
- * {@link #export()}.
- * <p>
- * Typically, do not worry about their ready status, because they are initialized before
- * any {@link ServiceConfig} exports, or The Dubbo export will be failed.
- * <p>
- * Being aware of it's not a thread-safe implementation.
- *
- * @see MetadataServiceExporter
- * @see ServiceConfig
- * @see ConfigManager
- * @since 2.7.5
+ * Export metadata service
*/
-public class ConfigurableMetadataServiceExporter implements MetadataServiceExporter, ScopeModelAware {
+public class ConfigurableMetadataServiceExporter {
private final Logger logger = LoggerFactory.getLogger(getClass());
- private MetadataService metadataService;
-
- private volatile ServiceConfig<MetadataService> serviceConfig;
- private ApplicationModel applicationModel;
+ private MetadataServiceDelegation metadataService;
- public ConfigurableMetadataServiceExporter() {
- }
+ private final ServiceConfig<MetadataService> serviceConfig;
+ private final ApplicationModel applicationModel;
- @Override
- public void setApplicationModel(ApplicationModel applicationModel) {
+ public ConfigurableMetadataServiceExporter(ApplicationModel applicationModel, MetadataServiceDelegation metadataService) {
this.applicationModel = applicationModel;
- }
-
- public void setMetadataService(MetadataService metadataService) {
this.metadataService = metadataService;
+ this.serviceConfig = buildServiceConfig();
}
- @Override
public ConfigurableMetadataServiceExporter export() {
if (!isExported()) {
-
- ApplicationConfig applicationConfig = getApplicationConfig();
- ServiceConfig<MetadataService> serviceConfig = new ServiceConfig<>();
- serviceConfig.setScopeModel(applicationModel.getInternalModule());
- serviceConfig.setApplication(applicationConfig);
- serviceConfig.setRegistry(new RegistryConfig("N/A"));
- serviceConfig.setProtocol(generateMetadataProtocol());
- serviceConfig.setInterface(MetadataService.class);
- serviceConfig.setDelay(0);
- serviceConfig.setRef(metadataService);
- serviceConfig.setGroup(applicationConfig.getName());
- serviceConfig.setVersion(metadataService.version());
-// serviceConfig.setMethods(generateMethodConfig());
- serviceConfig.setConnections(1);
- serviceConfig.setExecutes(100);
-
// export
serviceConfig.export();
-
+ metadataService.setMetadataURL(serviceConfig.getExportedUrls().get(0));
if (logger.isInfoEnabled()) {
logger.info("The MetadataService exports urls : " + serviceConfig.getExportedUrls());
}
-
- this.serviceConfig = serviceConfig;
-
} else {
if (logger.isWarnEnabled()) {
logger.warn("The MetadataService has been exported : " + serviceConfig.getExportedUrls());
@@ -116,41 +75,14 @@ public class ConfigurableMetadataServiceExporter implements MetadataServiceExpor
return this;
}
-// /**
-// * Generate Method Config for Service Discovery Metadata <p/>
-// * <p>
-// * Make {@link MetadataService} support argument callback,
-// * used to notify {@link org.apache.dubbo.registry.client.ServiceInstance}'s
-// * metadata change event
-// *
-// * @since 3.0
-// */
-// private List<MethodConfig> generateMethodConfig() {
-// MethodConfig methodConfig = new MethodConfig();
-// methodConfig.setName("getAndListenInstanceMetadata");
-//
-// ArgumentConfig argumentConfig = new ArgumentConfig();
-// argumentConfig.setIndex(1);
-// argumentConfig.setCallback(true);
-//
-// methodConfig.setArguments(Collections.singletonList(argumentConfig));
-//
-// return Collections.singletonList(methodConfig);
-// }
-
- @Override
public ConfigurableMetadataServiceExporter unexport() {
if (isExported()) {
serviceConfig.unexport();
+ metadataService.setMetadataURL(null);
}
return this;
}
- @Override
- public List<URL> getExportedURLs() {
- return serviceConfig != null ? serviceConfig.getExportedUrls() : emptyList();
- }
-
public boolean isExported() {
return serviceConfig != null && serviceConfig.isExported() && !serviceConfig.isUnexported();
}
@@ -225,4 +157,35 @@ public class ConfigurableMetadataServiceExporter implements MetadataServiceExpor
return StringUtils.isNotEmpty(protocol) ? protocol : DUBBO_PROTOCOL;
}
+
+
+ private ServiceConfig<MetadataService> buildServiceConfig() {
+ ApplicationConfig applicationConfig = getApplicationConfig();
+ ServiceConfig<MetadataService> serviceConfig = new ServiceConfig<>();
+ serviceConfig.setScopeModel(applicationModel.getInternalModule());
+ serviceConfig.setApplication(applicationConfig);
+ serviceConfig.setRegistry(new RegistryConfig("N/A"));
+ serviceConfig.setProtocol(generateMetadataProtocol());
+ serviceConfig.setInterface(MetadataService.class);
+ serviceConfig.setDelay(0);
+ serviceConfig.setRef(metadataService);
+ serviceConfig.setGroup(applicationConfig.getName());
+ serviceConfig.setVersion(MetadataService.VERSION);
+// serviceConfig.setMethods(generateMethodConfig());
+ serviceConfig.setConnections(1);
+ serviceConfig.setExecutes(100);
+
+ return serviceConfig;
+ }
+
+ // for unit test
+ public void setMetadataService(MetadataServiceDelegation metadataService) {
+ this.metadataService = metadataService;
+ }
+
+ // for unit test
+ public List<URL> getExportedURLs() {
+ return serviceConfig != null ? serviceConfig.getExportedUrls() : emptyList();
+ }
+
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/MetadataServiceDelegation.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceDelegation.java
similarity index 92%
rename from dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/MetadataServiceDelegation.java
rename to dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceDelegation.java
index 191a60f..6b36532 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/MetadataServiceDelegation.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceDelegation.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dubbo.registry.client.metadata.store;
+package org.apache.dubbo.config.metadata;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.logger.Logger;
@@ -26,7 +26,6 @@ import org.apache.dubbo.metadata.MetadataService;
import org.apache.dubbo.registry.client.ServiceDiscovery;
import org.apache.dubbo.registry.support.RegistryManager;
import org.apache.dubbo.rpc.model.ApplicationModel;
-import org.apache.dubbo.rpc.model.ScopeModelAware;
import java.util.ArrayList;
import java.util.Comparator;
@@ -49,13 +48,17 @@ import static org.apache.dubbo.common.utils.CollectionUtils.isEmpty;
/**
* Implementation providing remote RPC service to facilitate the query of metadata information.
*/
-public class MetadataServiceDelegation implements MetadataService, ScopeModelAware, Disposable {
+public class MetadataServiceDelegation implements MetadataService, Disposable {
Logger logger = LoggerFactory.getLogger(getClass());
- private ApplicationModel applicationModel;
- private RegistryManager registryManager;
- private ConcurrentNavigableMap<String, String> serviceDefinitions = new ConcurrentSkipListMap<>();
+ private final ApplicationModel applicationModel;
+ private final RegistryManager registryManager;
+ private final ConcurrentNavigableMap<String, String> serviceDefinitions = new ConcurrentSkipListMap<>();
+ private URL url;
- public MetadataServiceDelegation() {}
+ public MetadataServiceDelegation(ApplicationModel applicationModel) {
+ this.applicationModel = applicationModel;
+ registryManager = RegistryManager.getInstance(applicationModel);
+ }
/**
* Gets the current Dubbo Service name
@@ -68,9 +71,12 @@ public class MetadataServiceDelegation implements MetadataService, ScopeModelAwa
}
@Override
- public void setApplicationModel(ApplicationModel applicationModel) {
- this.applicationModel = applicationModel;
- registryManager = RegistryManager.getInstance(applicationModel);
+ public URL getMetadataURL() {
+ return url;
+ }
+
+ public void setMetadataURL(URL url) {
+ this.url = url;
}
@Override
@@ -79,7 +85,7 @@ public class MetadataServiceDelegation implements MetadataService, ScopeModelAwa
}
private SortedSet<String> getAllUnmodifiableServiceURLs() {
- SortedSet<URL> bizURLs = new TreeSet<>(MetadataServiceDelegation.URLComparator.INSTANCE);
+ SortedSet<URL> bizURLs = new TreeSet<>(URLComparator.INSTANCE);
List<ServiceDiscovery> serviceDiscoveries = registryManager.getServiceDiscoveries();
for (ServiceDiscovery sd : serviceDiscoveries) {
MetadataInfo metadataInfo = sd.getMetadata();
@@ -99,7 +105,7 @@ public class MetadataServiceDelegation implements MetadataService, ScopeModelAwa
}
private SortedSet<String> getAllUnmodifiableSubscribedURLs() {
- SortedSet<URL> bizURLs = new TreeSet<>(MetadataServiceDelegation.URLComparator.INSTANCE);
+ SortedSet<URL> bizURLs = new TreeSet<>(URLComparator.INSTANCE);
List<ServiceDiscovery> serviceDiscoveries = registryManager.getServiceDiscoveries();
for (ServiceDiscovery sd : serviceDiscoveries) {
MetadataInfo metadataInfo = sd.getMetadata();
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizer.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizer.java
similarity index 67%
rename from dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizer.java
rename to dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizer.java
index 1576d21..f8f016d 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizer.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizer.java
@@ -14,13 +14,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dubbo.registry.client.metadata;
+package org.apache.dubbo.config.metadata;
+import org.apache.dubbo.common.BaseServiceMetadata;
import org.apache.dubbo.common.URL;
-import org.apache.dubbo.metadata.MetadataServiceExporter;
+import org.apache.dubbo.common.utils.CollectionUtils;
+import org.apache.dubbo.metadata.MetadataService;
import org.apache.dubbo.registry.client.ServiceInstance;
import org.apache.dubbo.registry.client.ServiceInstanceCustomizer;
+import org.apache.dubbo.registry.client.metadata.SpringCloudMetadataServiceURLBuilder;
import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ModuleServiceRepository;
+import org.apache.dubbo.rpc.model.ProviderModel;
import java.util.List;
import java.util.Map;
@@ -52,11 +57,16 @@ public class MetadataServiceURLParamsMetadataCustomizer implements ServiceInstan
}
private String resolveMetadataPropertyValue(ApplicationModel applicationModel) {
- MetadataServiceExporter metadataServiceExporter = applicationModel.getExtensionLoader(MetadataServiceExporter.class).getDefaultExtension();
- if (metadataServiceExporter.isExported()) {
- List<URL> metadataURLs = metadataServiceExporter.getExportedURLs();
- return getMetadataServiceParameter(metadataURLs.get(0));
+ ModuleServiceRepository serviceRepository = applicationModel.getInternalModule().getServiceRepository();
+ String key = BaseServiceMetadata.buildServiceKey(MetadataService.class.getName(), applicationModel.getApplicationName(), MetadataService.VERSION);
+ ProviderModel providerModel = serviceRepository.lookupExportedService(key);
+ String metadataValue = "";
+ if (providerModel != null) {
+ List<URL> metadataURLs = providerModel.getServiceConfig().getExportedUrls();
+ if (CollectionUtils.isNotEmpty(metadataURLs)) {
+ metadataValue = getMetadataServiceParameter(metadataURLs.get(0));
+ }
}
- return "";
+ return metadataValue;
}
}
diff --git a/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataServiceExporter b/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataServiceExporter
deleted file mode 100644
index 2bda3f2..0000000
--- a/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataServiceExporter
+++ /dev/null
@@ -1,2 +0,0 @@
-# since 2.7.8
-local = org.apache.dubbo.config.metadata.ConfigurableMetadataServiceExporter
diff --git a/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer b/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
index 656f868..ba0847a 100644
--- a/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
+++ b/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
@@ -1 +1,2 @@
-port=org.apache.dubbo.config.metadata.ServiceInstanceHostPortCustomizer
\ No newline at end of file
+port=org.apache.dubbo.config.metadata.ServiceInstanceHostPortCustomizer
+metadata-url=org.apache.dubbo.config.metadata.MetadataServiceURLParamsMetadataCustomizer
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
index 6f480c2..0732f40 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
@@ -31,10 +31,10 @@ import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.config.SysProps;
import org.apache.dubbo.config.api.DemoService;
import org.apache.dubbo.config.deploy.DefaultApplicationDeployer;
+import org.apache.dubbo.config.metadata.ConfigurableMetadataServiceExporter;
import org.apache.dubbo.config.provider.impl.DemoServiceImpl;
import org.apache.dubbo.config.utils.ConfigValidationUtils;
import org.apache.dubbo.metadata.MetadataService;
-import org.apache.dubbo.metadata.MetadataServiceExporter;
import org.apache.dubbo.monitor.MonitorService;
import org.apache.dubbo.registry.RegistryService;
import org.apache.dubbo.rpc.Exporter;
@@ -335,7 +335,7 @@ public class DubboBootstrapTest {
private void assertMetadataService(DubboBootstrap bootstrap, int availablePort, boolean shouldReport) {
DefaultApplicationDeployer applicationDeployer = getApplicationDeployer(bootstrap.getApplicationModel());
- MetadataServiceExporter metadataServiceExporter = ReflectUtils.getFieldValue(applicationDeployer, "metadataServiceExporter");
+ ConfigurableMetadataServiceExporter metadataServiceExporter = ReflectUtils.getFieldValue(applicationDeployer, "metadataServiceExporter");
Assertions.assertTrue(metadataServiceExporter.isExported());
DubboProtocol protocol = DubboProtocol.getDubboProtocol(bootstrap.getApplicationModel());
Map<String, Exporter<?>> exporters = protocol.getExporterMap();
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizerTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizerTest.java
similarity index 93%
rename from dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizerTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizerTest.java
index f7aace9..29a1092 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizerTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizerTest.java
@@ -14,12 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dubbo.registry.client.metadata;
+package org.apache.dubbo.config.metadata;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.metadata.MetadataService;
import org.apache.dubbo.registry.client.DefaultServiceInstance;
-import org.apache.dubbo.registry.client.metadata.store.MetadataServiceDelegation;
import org.apache.dubbo.rpc.model.ApplicationModel;
import com.google.gson.Gson;
@@ -46,7 +45,7 @@ public class MetadataServiceURLParamsMetadataCustomizerTest {
private static final Gson gson = new Gson();
public DefaultServiceInstance instance;
- private MetadataServiceDelegation metadataService;
+ private MetadataService metadataService;
private URL metadataServiceURL = URL.valueOf("metadata://127.0.0.1:21881/" + MetadataService.class.getName() +
"?application=demo&group=g1&version=1.0.0×tamp=1632662388960");
@@ -58,7 +57,7 @@ public class MetadataServiceURLParamsMetadataCustomizerTest {
@BeforeEach
public void init() {
instance = createInstance();
- metadataService = mock(MetadataServiceDelegation.class);
+ metadataService = mock(MetadataService.class);
}
@AfterEach
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryIntegrationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryIntegrationTest.java
index 8d2159f..6f6a5ab 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryIntegrationTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryIntegrationTest.java
@@ -24,9 +24,9 @@ import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+import org.apache.dubbo.config.metadata.MetadataServiceDelegation;
import org.apache.dubbo.integration.IntegrationTest;
import org.apache.dubbo.registry.RegistryServiceListener;
-import org.apache.dubbo.registry.client.metadata.store.MetadataServiceDelegation;
import org.apache.dubbo.registrycenter.RegistryCenter;
import org.apache.dubbo.registrycenter.ZookeeperMultipleRegistryCenter;
@@ -179,15 +179,15 @@ public class MultipleRegistryCenterServiceDiscoveryRegistryIntegrationTest imple
Assertions.assertTrue(serviceDiscoveryRegistryInfoWrapper.isRegistered());
// check if it's subscribed
Assertions.assertFalse(serviceDiscoveryRegistryInfoWrapper.isSubscribed());
- MetadataServiceDelegation inMemoryWritableMetadataService = serviceDiscoveryRegistryInfoWrapper.getInMemoryWritableMetadataService();
+ MetadataServiceDelegation metadataService = serviceDiscoveryRegistryInfoWrapper.getInMemoryWritableMetadataService();
// check if the count of exported urls is right or not
- Assertions.assertEquals(inMemoryWritableMetadataService.getExportedURLs().size(), 1);
+ Assertions.assertEquals(metadataService.getExportedURLs().size(), 1);
// check the exported url is right or not.
- Assertions.assertTrue(inMemoryWritableMetadataService.getExportedURLs()
+ Assertions.assertTrue(metadataService.getExportedURLs()
.first()
.contains(MultipleRegistryCenterServiceDiscoveryRegistryService.class.getName()));
// check the count of metadatainfo is right or not.
- Assertions.assertEquals(inMemoryWritableMetadataService.getMetadataInfos().size(), 1);
+ Assertions.assertEquals(metadataService.getMetadataInfos().size(), 1);
}
}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryRegistryServiceListener.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryRegistryServiceListener.java
index 3459c19..bd2783b 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryRegistryServiceListener.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryRegistryServiceListener.java
@@ -18,11 +18,11 @@ package org.apache.dubbo.integration.multiple.servicediscoveryregistry;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.extension.Activate;
+import org.apache.dubbo.config.metadata.MetadataServiceDelegation;
import org.apache.dubbo.metadata.MetadataService;
import org.apache.dubbo.registry.Registry;
import org.apache.dubbo.registry.RegistryServiceListener;
import org.apache.dubbo.registry.client.ServiceDiscoveryRegistry;
-import org.apache.dubbo.registry.client.metadata.store.MetadataServiceDelegation;
import static org.apache.dubbo.integration.Constants.MULTIPLE_CONFIG_CENTER_SERVICE_DISCOVERY_REGISTRY;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/servicediscoveryregistry/ServiceDiscoveryRegistryInfoWrapper.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/servicediscoveryregistry/ServiceDiscoveryRegistryInfoWrapper.java
index 4df35d3..743b233 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/servicediscoveryregistry/ServiceDiscoveryRegistryInfoWrapper.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/servicediscoveryregistry/ServiceDiscoveryRegistryInfoWrapper.java
@@ -16,12 +16,11 @@
*/
package org.apache.dubbo.integration.multiple.servicediscoveryregistry;
+import org.apache.dubbo.config.metadata.MetadataServiceDelegation;
import org.apache.dubbo.registry.client.ServiceDiscoveryRegistry;
-import org.apache.dubbo.registry.client.metadata.store.MetadataServiceDelegation;
/**
* The instance to wrap {@link org.apache.dubbo.registry.client.ServiceDiscoveryRegistry}
- * and {@link MetadataServiceDelegation}
*/
public class ServiceDiscoveryRegistryInfoWrapper {
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/SingleRegistryCenterDubboProtocolIntegrationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/SingleRegistryCenterDubboProtocolIntegrationTest.java
index 2026553..3b5a80e 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/SingleRegistryCenterDubboProtocolIntegrationTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/SingleRegistryCenterDubboProtocolIntegrationTest.java
@@ -27,6 +27,7 @@ import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.config.ServiceListener;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+import org.apache.dubbo.config.metadata.MetadataServiceDelegation;
import org.apache.dubbo.integration.IntegrationTest;
import org.apache.dubbo.metadata.MetadataInfo;
import org.apache.dubbo.metadata.MetadataService;
@@ -34,7 +35,6 @@ import org.apache.dubbo.registry.ListenerRegistryWrapper;
import org.apache.dubbo.registry.Registry;
import org.apache.dubbo.registry.client.ServiceDiscoveryRegistry;
import org.apache.dubbo.registry.client.ServiceDiscoveryRegistryDirectory;
-import org.apache.dubbo.registry.client.metadata.store.MetadataServiceDelegation;
import org.apache.dubbo.registry.client.migration.MigrationInvoker;
import org.apache.dubbo.registry.support.RegistryManager;
import org.apache.dubbo.registry.zookeeper.ZookeeperServiceDiscovery;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/metadata/MetadataServiceExporterTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/metadata/MetadataServiceExporterTest.java
index abf99c1..01d0d10 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/metadata/MetadataServiceExporterTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/metadata/MetadataServiceExporterTest.java
@@ -18,13 +18,16 @@ package org.apache.dubbo.metadata;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.utils.NetUtils;
+import org.apache.dubbo.common.utils.ReflectUtils;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.config.api.DemoService;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+import org.apache.dubbo.config.deploy.DefaultApplicationDeployer;
import org.apache.dubbo.config.metadata.ConfigurableMetadataServiceExporter;
+import org.apache.dubbo.config.metadata.MetadataServiceDelegation;
import org.apache.dubbo.config.provider.impl.DemoServiceImpl;
import org.apache.dubbo.registrycenter.RegistryCenter;
import org.apache.dubbo.registrycenter.ZookeeperSingleRegistryCenter;
@@ -38,21 +41,14 @@ import org.mockito.Mockito;
import java.util.List;
-import static org.apache.dubbo.common.constants.CommonConstants.COMPOSITE_METADATA_STORAGE_TYPE;
import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_PROTOCOL;
-import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
-/**
- * {@link MetadataServiceExporter} Test-Cases
- *
- * @since 2.7.8
- */
public class MetadataServiceExporterTest {
@BeforeEach
@@ -68,33 +64,26 @@ public class MetadataServiceExporterTest {
@Test
public void test() {
- MetadataService metadataService = Mockito.mock(MetadataService.class);
- ConfigurableMetadataServiceExporter exporter = new ConfigurableMetadataServiceExporter();
+ MetadataServiceDelegation metadataService = Mockito.mock(MetadataServiceDelegation.class);
+ ConfigurableMetadataServiceExporter exporter = new ConfigurableMetadataServiceExporter(ApplicationModel.defaultModel(), metadataService);
exporter.setMetadataService(metadataService);
- exporter.setApplicationModel(ApplicationModel.defaultModel());
exporter.export();
assertTrue(exporter.isExported());
exporter.unexport();
- assertTrue(exporter.supports(DEFAULT_METADATA_STORAGE_TYPE));
- assertTrue(exporter.supports(REMOTE_METADATA_STORAGE_TYPE));
- assertTrue(exporter.supports(COMPOSITE_METADATA_STORAGE_TYPE));
}
@Test
public void test2() throws Exception {
ApplicationModel applicationModel = ApplicationModel.defaultModel();
- ConfigurableMetadataServiceExporter exporter = (ConfigurableMetadataServiceExporter) applicationModel.getExtensionLoader(MetadataServiceExporter.class).getDefaultExtension();
- MetadataService metadataService = Mockito.mock(MetadataService.class);
- exporter.setMetadataService(metadataService);
applicationModel.getDeployer().start().get();
+ DefaultApplicationDeployer applicationDeployer = getApplicationDeployer(applicationModel);
+ ConfigurableMetadataServiceExporter exporter = ReflectUtils.getFieldValue(applicationDeployer, "metadataServiceExporter");
+
assertTrue(exporter.isExported());
- assertTrue(exporter.supports(DEFAULT_METADATA_STORAGE_TYPE));
- assertTrue(exporter.supports(REMOTE_METADATA_STORAGE_TYPE));
- assertTrue(exporter.supports(COMPOSITE_METADATA_STORAGE_TYPE));
applicationModel.getDeployer().stop();
assertFalse(exporter.isExported());
@@ -121,7 +110,8 @@ public class MetadataServiceExporterTest {
// will start exporter
providerBootstrap.start();
- ConfigurableMetadataServiceExporter exporter = (ConfigurableMetadataServiceExporter) providerBootstrap.getApplicationModel().getExtensionLoader(MetadataServiceExporter.class).getDefaultExtension();
+ DefaultApplicationDeployer applicationDeployer = getApplicationDeployer(providerBootstrap.getApplicationModel());
+ ConfigurableMetadataServiceExporter exporter = ReflectUtils.getFieldValue(applicationDeployer, "metadataServiceExporter");
try {
assertTrue(exporter.isExported());
@@ -159,7 +149,8 @@ public class MetadataServiceExporterTest {
// will start exporter.export()
providerBootstrap.start();
- ConfigurableMetadataServiceExporter exporter = (ConfigurableMetadataServiceExporter) providerBootstrap.getApplicationModel().getExtensionLoader(MetadataServiceExporter.class).getDefaultExtension();
+ DefaultApplicationDeployer applicationDeployer = getApplicationDeployer(providerBootstrap.getApplicationModel());
+ ConfigurableMetadataServiceExporter exporter = ReflectUtils.getFieldValue(applicationDeployer, "metadataServiceExporter");
try {
assertTrue(exporter.isExported());
@@ -173,6 +164,10 @@ public class MetadataServiceExporterTest {
assertFalse(exporter.isExported());
}
+ private DefaultApplicationDeployer getApplicationDeployer(ApplicationModel applicationModel) {
+ return (DefaultApplicationDeployer) DefaultApplicationDeployer.get(applicationModel);
+ }
+
@Test
public void testMetadataStartsBeforeNormalService() throws Exception {
DubboBootstrap providerBootstrap = DubboBootstrap.newInstance();
@@ -194,8 +189,8 @@ public class MetadataServiceExporterTest {
// will start exporter.export()
providerBootstrap.start();
- ConfigurableMetadataServiceExporter exporter = (ConfigurableMetadataServiceExporter) providerBootstrap.getApplicationModel().getExtensionLoader(MetadataServiceExporter.class).getDefaultExtension();
-
+ DefaultApplicationDeployer applicationDeployer = getApplicationDeployer(providerBootstrap.getApplicationModel());
+ ConfigurableMetadataServiceExporter exporter = ReflectUtils.getFieldValue(applicationDeployer, "metadataServiceExporter");
try {
assertTrue(exporter.isExported());
List<URL> urls = exporter.getExportedURLs();
diff --git a/dubbo-distribution/dubbo-all/pom.xml b/dubbo-distribution/dubbo-all/pom.xml
index be7c899..5a60457 100644
--- a/dubbo-distribution/dubbo-all/pom.xml
+++ b/dubbo-distribution/dubbo-all/pom.xml
@@ -663,12 +663,6 @@
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>
- META-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataServiceExporter
- </resource>
- </transformer>
- <transformer
- implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
- <resource>
META-INF/dubbo/internal/org.apache.dubbo.metadata.ServiceNameMapping
</resource>
</transformer>
diff --git a/dubbo-distribution/dubbo-core-spi/pom.xml b/dubbo-distribution/dubbo-core-spi/pom.xml
index f06ff26..84e78a5 100644
--- a/dubbo-distribution/dubbo-core-spi/pom.xml
+++ b/dubbo-distribution/dubbo-core-spi/pom.xml
@@ -367,12 +367,6 @@
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>
- META-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataServiceExporter
- </resource>
- </transformer>
- <transformer
- implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
- <resource>
META-INF/dubbo/internal/org.apache.dubbo.metadata.ServiceNameMapping
</resource>
</transformer>
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataService.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataService.java
index 7276b07..b5c5d2f 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataService.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataService.java
@@ -64,6 +64,8 @@ public interface MetadataService {
return VERSION;
}
+ URL getMetadataURL();
+
/**
* the list of String that presents all Dubbo subscribed {@link URL urls}
*
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataServiceExporter.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataServiceExporter.java
deleted file mode 100644
index e6192f3..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataServiceExporter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.metadata;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.extension.SPI;
-import org.apache.dubbo.common.lang.Prioritized;
-import org.apache.dubbo.rpc.model.ScopeModel;
-
-import java.util.List;
-
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
-import static org.apache.dubbo.common.extension.ExtensionScope.APPLICATION;
-
-/**
- * The exporter of {@link MetadataService}
- *
- * @see MetadataService
- * @see #export()
- * @see #unexport()
- * @since 2.7.5
- */
-@SPI(value = DEFAULT_METADATA_STORAGE_TYPE, scope = APPLICATION)
-public interface MetadataServiceExporter extends Prioritized {
-
- /**
- * Exports the {@link MetadataService} as a Dubbo service
- *
- * @return {@link MetadataServiceExporter itself}
- */
- MetadataServiceExporter export();
-
- /**
- * Unexports the {@link MetadataService}
- *
- * @return {@link MetadataServiceExporter itself}
- */
- MetadataServiceExporter unexport();
-
- /**
- * Get the {@link URL URLs} that were exported
- *
- * @return non-null
- */
- List<URL> getExportedURLs();
-
- /**
- * {@link MetadataService} is export or not
- *
- * @return if {@link #export()} was executed, return <code>true</code>, or <code>false</code>
- */
- boolean isExported();
-
- /**
- * Does current implementation support the specified metadata type?
- *
- * @param metadataType the specified metadata type
- * @return If supports, return <code>true</code>, or <code>false</code>
- * @since 2.7.8
- */
- default boolean supports(String metadataType) {
- return true;
- }
-
- /**
- * Get the extension of {@link MetadataServiceExporter} by the type.
- * If not found, return the default implementation
- *
- * @param metadataType the metadata type
- * @return non-null
- * @since 2.7.8
- */
- static MetadataServiceExporter getExtension(ScopeModel scopeModel, String metadataType) {
- return scopeModel.getExtensionLoader(MetadataServiceExporter.class).getOrDefaultExtension(metadataType);
- }
-
- /**
- * Get the default extension of {@link MetadataServiceExporter}
- *
- * @return non-null
- * @since 2.7.8
- */
- static MetadataServiceExporter getDefaultExtension(ScopeModel scopeModel) {
- return getExtension(scopeModel, DEFAULT_METADATA_STORAGE_TYPE);
- }
-}
-
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataServiceType.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataServiceType.java
deleted file mode 100644
index 3af6b38..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataServiceType.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.metadata;
-
-import static org.apache.dubbo.common.constants.CommonConstants.COMPOSITE_METADATA_STORAGE_TYPE;
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
-import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
-
-/**
- * The type enumerations of {@link MetadataService}
- *
- * @see MetadataService
- * @since 2.7.8
- */
-public enum MetadataServiceType {
-
- /**
- * The default type of {@link MetadataService}
- */
- DEFAULT(DEFAULT_METADATA_STORAGE_TYPE),
-
- /**
- * The remote type of {@link MetadataService}
- */
- REMOTE(REMOTE_METADATA_STORAGE_TYPE),
-
- /**
- * The composite type of {@link MetadataService}
- */
- COMPOSITE(COMPOSITE_METADATA_STORAGE_TYPE);
-
- /**
- * The {@link String} value of type
- */
- private final String value;
-
- MetadataServiceType(String value) {
- this.value = value;
- }
-
- public String getValue() {
- return value;
- }
-
- public static MetadataServiceType getOrDefault(String value) {
- MetadataServiceType targetType = null;
- for (MetadataServiceType type : values()) {
- if (type.getValue().equals(value)) {
- targetType = type;
- break;
- }
- }
- if (targetType == null) {
- targetType = DEFAULT;
- }
- return targetType;
- }
-}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/MetadataReportInstance.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/MetadataReportInstance.java
index 848b2e9..96e5d84 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/MetadataReportInstance.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/MetadataReportInstance.java
@@ -20,6 +20,7 @@ import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.URLBuilder;
import org.apache.dubbo.common.resource.Disposable;
import org.apache.dubbo.config.MetadataReportConfig;
+import org.apache.dubbo.metadata.report.support.NopMetadataReport;
import org.apache.dubbo.rpc.model.ApplicationModel;
import java.util.HashMap;
@@ -29,6 +30,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_DIRECTORY;
import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
import static org.apache.dubbo.common.utils.StringUtils.isEmpty;
import static org.apache.dubbo.metadata.report.support.Constants.METADATA_REPORT_KEY;
@@ -48,15 +50,27 @@ import static org.apache.dubbo.metadata.report.support.Constants.METADATA_REPORT
public class MetadataReportInstance implements Disposable {
private AtomicBoolean init = new AtomicBoolean(false);
+ private String metadataType;
// mapping of registry id to metadata report instance, registry instances will use this mapping to find related metadata reports
private final Map<String, MetadataReport> metadataReports = new HashMap<>();
+ private ApplicationModel applicationModel;
+ private final NopMetadataReport nopMetadataReport;
+
+ public MetadataReportInstance(ApplicationModel applicationModel) {
+ this.applicationModel = applicationModel;
+ this.nopMetadataReport = new NopMetadataReport();
+ }
public void init(MetadataReportConfig config) {
if (!init.compareAndSet(false, true)) {
return;
}
- ApplicationModel applicationModel = config.getApplicationModel();
+
+ this.metadataType = applicationModel.getApplicationConfigManager().getApplicationOrElseThrow().getMetadataType();
+ if (metadataType == null) {
+ this.metadataType = DEFAULT_METADATA_STORAGE_TYPE;
+ }
MetadataReportFactory metadataReportFactory = applicationModel.getExtensionLoader(MetadataReportFactory.class).getAdaptiveExtension();
URL url = config.toUrl();
@@ -90,6 +104,14 @@ public class MetadataReportInstance implements Disposable {
return metadataReport;
}
+ public MetadataReport getNopMetadataReport() {
+ return nopMetadataReport;
+ }
+
+ public String getMetadataType() {
+ return metadataType;
+ }
+
public boolean inited() {
return init.get();
}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/NopMetadataReport.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/NopMetadataReport.java
new file mode 100644
index 0000000..f63be93
--- /dev/null
+++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/NopMetadataReport.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.metadata.report.support;
+
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;
+import org.apache.dubbo.metadata.report.MetadataReport;
+import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
+import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;
+import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class NopMetadataReport implements MetadataReport {
+ public NopMetadataReport() {
+ }
+
+ @Override
+ public void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {
+
+ }
+
+ @Override
+ public String getServiceDefinition(MetadataIdentifier metadataIdentifier) {
+ return null;
+ }
+
+ @Override
+ public void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap) {
+
+ }
+
+ @Override
+ public List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier) {
+ return null;
+ }
+
+ @Override
+ public void destroy() {
+
+ }
+
+ @Override
+ public void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url) {
+
+ }
+
+ @Override
+ public void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier) {
+
+ }
+
+ @Override
+ public void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Set<String> urls) {
+
+ }
+
+ @Override
+ public List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier) {
+ return null;
+ }
+}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataServiceTypeTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataServiceTypeTest.java
deleted file mode 100644
index 11eec1d..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataServiceTypeTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.metadata;
-
-import org.junit.jupiter.api.Test;
-
-import static org.apache.dubbo.metadata.MetadataServiceType.COMPOSITE;
-import static org.apache.dubbo.metadata.MetadataServiceType.DEFAULT;
-import static org.apache.dubbo.metadata.MetadataServiceType.REMOTE;
-import static org.apache.dubbo.metadata.MetadataServiceType.getOrDefault;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * {@link MetadataServiceType} Test-Cases
- *
- * @since 2.7.8
- */
-public class MetadataServiceTypeTest {
-
- @Test
- public void testGetValue() {
- assertEquals("local", DEFAULT.getValue());
- assertEquals("remote", REMOTE.getValue());
- assertEquals("composite", COMPOSITE.getValue());
- }
-
- @Test
- public void testGetOrDefault() {
- assertEquals(DEFAULT, getOrDefault("local"));
- assertEquals(REMOTE, getOrDefault("remote"));
- assertEquals(COMPOSITE, getOrDefault("composite"));
- assertEquals(DEFAULT, getOrDefault("others"));
- }
-}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/MetadataReportInstanceTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/MetadataReportInstanceTest.java
index 94f27e4..fa665de 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/MetadataReportInstanceTest.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/MetadataReportInstanceTest.java
@@ -21,6 +21,7 @@ import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.MetadataReportConfig;
import org.apache.dubbo.config.context.ConfigManager;
import org.apache.dubbo.rpc.model.ApplicationModel;
+
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -41,9 +42,9 @@ class MetadataReportInstanceTest {
@BeforeEach
public void setUp() {
- metadataReportInstance = new MetadataReportInstance();
configManager = mock(ConfigManager.class);
ApplicationModel applicationModel = spy(ApplicationModel.defaultModel());
+ metadataReportInstance = new MetadataReportInstance(applicationModel);
URL url = URL.valueOf("metadata://127.0.0.1:20880/TestService?version=1.0.0&metadata=JTest");
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryScopeModelInitializer.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryScopeModelInitializer.java
index fe1973d..6be4e29 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryScopeModelInitializer.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryScopeModelInitializer.java
@@ -17,7 +17,6 @@
package org.apache.dubbo.registry;
import org.apache.dubbo.common.beans.factory.ScopeBeanFactory;
-import org.apache.dubbo.registry.client.metadata.store.MetadataServiceDelegation;
import org.apache.dubbo.registry.support.RegistryManager;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.FrameworkModel;
@@ -34,7 +33,6 @@ public class RegistryScopeModelInitializer implements ScopeModelInitializer {
public void initializeApplicationModel(ApplicationModel applicationModel) {
ScopeBeanFactory beanFactory = applicationModel.getBeanFactory();
beanFactory.registerBean(RegistryManager.class);
- beanFactory.registerBean(MetadataServiceDelegation.class);
}
@Override
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
index dc2eb8b..2d0b977 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
@@ -31,6 +31,7 @@ import org.apache.dubbo.rpc.model.ApplicationModel;
import java.util.List;
+import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_KEY;
import static org.apache.dubbo.metadata.RevisionResolver.EMPTY_REVISION;
import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.EXPORTED_SERVICES_REVISION_PROPERTY_NAME;
@@ -47,6 +48,7 @@ public abstract class AbstractServiceDiscovery implements ServiceDiscovery {
protected volatile ServiceInstance serviceInstance;
protected volatile MetadataInfo metadataInfo;
protected MetadataReport metadataReport;
+ protected String metadataType;
protected MetaCacheManager metaCacheManager;
protected URL registryURL;
@@ -55,9 +57,13 @@ public abstract class AbstractServiceDiscovery implements ServiceDiscovery {
public AbstractServiceDiscovery(ApplicationModel applicationModel, URL registryURL) {
this(applicationModel.getApplicationName(), registryURL);
this.applicationModel = applicationModel;
-
- metadataReport = applicationModel.getBeanFactory().getBean(MetadataReportInstance.class)
- .getMetadataReport(registryURL.getParameter(REGISTRY_CLUSTER_KEY));
+ MetadataReportInstance metadataReportInstance = applicationModel.getBeanFactory().getBean(MetadataReportInstance.class);
+ metadataType = metadataReportInstance.getMetadataType();
+ if (REMOTE_METADATA_STORAGE_TYPE.equals(metadataReportInstance.getMetadataType())) {
+ this.metadataReport = metadataReportInstance.getMetadataReport(registryURL.getParameter(REGISTRY_CLUSTER_KEY));
+ } else {
+ this.metadataReport = metadataReportInstance.getNopMetadataReport();
+ }
}
public AbstractServiceDiscovery(String serviceName, URL registryURL) {
@@ -203,7 +209,6 @@ public abstract class AbstractServiceDiscovery implements ServiceDiscovery {
private ServiceInstance createServiceInstance() {
DefaultServiceInstance instance = new DefaultServiceInstance(serviceName, applicationModel);
instance.setServiceMetadata(metadataInfo);
- String metadataType = applicationModel.getApplicationConfigManager().getApplicationOrElseThrow().getMetadataType();
setMetadataStorageType(instance, metadataType);
ServiceInstanceMetadataUtils.customizeInstance(instance, applicationModel);
return instance;
diff --git a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
index aa9a685..e11c6e4 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
+++ b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
@@ -1,3 +1,2 @@
-metadata-url=org.apache.dubbo.registry.client.metadata.MetadataServiceURLParamsMetadataCustomizer
protocol-ports=org.apache.dubbo.registry.client.metadata.ProtocolPortsMetadataCustomizer
instance-metadata=org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataCustomizer
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ProtocolPortsMetadataCustomizerTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ProtocolPortsMetadataCustomizerTest.java
index 96ad9c1..86fe271 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ProtocolPortsMetadataCustomizerTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ProtocolPortsMetadataCustomizerTest.java
@@ -21,7 +21,6 @@ import org.apache.dubbo.common.beans.factory.ScopeBeanFactory;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.metadata.MetadataService;
import org.apache.dubbo.registry.client.DefaultServiceInstance;
-import org.apache.dubbo.registry.client.metadata.store.MetadataServiceDelegation;
import org.apache.dubbo.rpc.model.ApplicationModel;
import com.google.gson.Gson;
@@ -51,7 +50,7 @@ public class ProtocolPortsMetadataCustomizerTest {
private static final Gson gson = new Gson();
public DefaultServiceInstance instance;
- private static MetadataServiceDelegation mockedMetadataService;
+ private static MetadataService mockedMetadataService;
private static ApplicationModel mockedApplicationModel;
private static ScopeBeanFactory mockedBeanFactory;
@@ -64,7 +63,7 @@ public class ProtocolPortsMetadataCustomizerTest {
ApplicationConfig applicationConfig = new ApplicationConfig("test");
ApplicationModel.defaultModel().getApplicationConfigManager().setApplication(applicationConfig);
- mockedMetadataService = Mockito.mock(MetadataServiceDelegation.class);
+ mockedMetadataService = Mockito.mock(MetadataService.class);
mockedApplicationModel = Mockito.mock(ApplicationModel.class);
Mockito.when(mockedApplicationModel.getBeanFactory()).thenReturn(mockedBeanFactory);
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizerTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizerTest.java
index 0255ea3..1fda298 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizerTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizerTest.java
@@ -23,7 +23,6 @@ import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.metadata.MetadataInfo;
import org.apache.dubbo.metadata.MetadataService;
import org.apache.dubbo.registry.client.DefaultServiceInstance;
-import org.apache.dubbo.registry.client.metadata.store.MetadataServiceDelegation;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.junit.jupiter.api.AfterAll;
@@ -43,7 +42,7 @@ import static org.mockito.Mockito.mock;
public class ServiceInstanceMetadataCustomizerTest {
public DefaultServiceInstance instance;
- private static MetadataServiceDelegation mockedMetadataService;
+ private static MetadataService mockedMetadataService;
private static ApplicationModel mockedApplicationModel;
private static ScopeBeanFactory mockedBeanFactory;
@@ -56,7 +55,7 @@ public class ServiceInstanceMetadataCustomizerTest {
ApplicationConfig applicationConfig = new ApplicationConfig("test");
ApplicationModel.defaultModel().getApplicationConfigManager().setApplication(applicationConfig);
- mockedMetadataService = Mockito.mock(MetadataServiceDelegation.class);
+ mockedMetadataService = Mockito.mock(MetadataService.class);
mockedApplicationModel = Mockito.mock(ApplicationModel.class);
Mockito.when(mockedApplicationModel.getBeanFactory()).thenReturn(mockedBeanFactory);
@@ -72,7 +71,7 @@ public class ServiceInstanceMetadataCustomizerTest {
@BeforeEach
public void init() {
instance = createInstance();
- mockedMetadataService = mock(MetadataServiceDelegation.class);
+ mockedMetadataService = mock(MetadataService.class);
URL url = URL.valueOf("dubbo://30.10.104.63:20880/org.apache.dubbo.demo.GreetingService?" + "params-filter=-default&" +
"REGISTRY_CLUSTER=registry1&anyhost=true&application=demo-provider2&delay=5000&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&group=greeting&interface=org.apache.dubbo.demo.GreetingService&metadata-type=remote&methods=hello&pid=55805&release=&revision=1.0.0&service-name-mapping=true&side=provider&timeout=5000×tamp=1630229110058&version=1.0.0");