impleme
// export services
exportServices();
- // prepare application instance
- // exclude internal module to avoid wait itself
- if (moduleModel != moduleModel.getApplicationModel().getInternalModule()) {
- applicationDeployer.prepareApplicationInstance();
- }
+ // prepare application instance
+ // exclude internal module to avoid wait itself
+ if (moduleModel != moduleModel.getApplicationModel().getInternalModule()) {
+ applicationDeployer.prepareInternalModule();
+ }
// refer services
referServices();
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 39a1fc681a..8d7ac95938 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
@@ -22,20 +22,14 @@ import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.utils.CollectionUtils;
import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ArgumentConfig;
-import org.apache.dubbo.config.MethodConfig;
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.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -46,70 +40,31 @@ 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()}.
- *
- * Typically, do not worry about their ready status, because they are initialized before
- * any {@link ServiceConfig} exports, or The Dubbo export will be failed.
- *
- * 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 MetadataServiceDelegation metadataService;
private volatile ServiceConfig serviceConfig;
- private ApplicationModel applicationModel;
+ private final ApplicationModel applicationModel;
- public ConfigurableMetadataServiceExporter() {
- }
-
- @Override
- public void setApplicationModel(ApplicationModel applicationModel) {
+ public ConfigurableMetadataServiceExporter(ApplicationModel applicationModel, MetadataServiceDelegation metadataService) {
this.applicationModel = applicationModel;
- }
-
- public void setMetadataService(MetadataService metadataService) {
this.metadataService = metadataService;
}
- @Override
- public ConfigurableMetadataServiceExporter export() {
-
- if (!isExported()) {
-
- ApplicationConfig applicationConfig = getApplicationConfig();
- ServiceConfig 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);
-
+ public synchronized ConfigurableMetadataServiceExporter export() {
+ if (serviceConfig == null || !isExported()) {
+ this.serviceConfig = buildServiceConfig();
// 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());
@@ -119,41 +74,14 @@ public class ConfigurableMetadataServiceExporter implements MetadataServiceExpor
return this;
}
- /**
- * Generate Method Config for Service Discovery Metadata
- *
- * 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 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 getExportedURLs() {
- return serviceConfig != null ? serviceConfig.getExportedUrls() : emptyList();
- }
-
public boolean isExported() {
return serviceConfig != null && serviceConfig.isExported() && !serviceConfig.isUnexported();
}
@@ -227,4 +155,35 @@ public class ConfigurableMetadataServiceExporter implements MetadataServiceExpor
return StringUtils.isNotEmpty(protocol) ? protocol : DUBBO_PROTOCOL;
}
+
+
+ private ServiceConfig buildServiceConfig() {
+ ApplicationConfig applicationConfig = getApplicationConfig();
+ ServiceConfig 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 getExportedURLs() {
+ return serviceConfig != null ? serviceConfig.getExportedUrls() : emptyList();
+ }
+
}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ExporterDeployListener.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ExporterDeployListener.java
new file mode 100644
index 0000000000..1a0bafc12d
--- /dev/null
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ExporterDeployListener.java
@@ -0,0 +1,96 @@
+/*
+ * 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.config.metadata;
+
+import org.apache.dubbo.common.deploy.ApplicationDeployListener;
+import org.apache.dubbo.common.lang.Prioritized;
+import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.rpc.model.ApplicationModel;
+
+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
+import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
+
+public class ExporterDeployListener implements ApplicationDeployListener, Prioritized {
+ protected volatile ConfigurableMetadataServiceExporter metadataServiceExporter;
+
+ @Override
+ public void onStarting(ApplicationModel scopeModel) {
+
+ }
+
+ @Override
+ public synchronized void onStarted(ApplicationModel applicationModel) {
+
+ }
+
+ @Override
+ public synchronized void onStopping(ApplicationModel scopeModel) {
+
+ }
+
+ private String getMetadataType(ApplicationModel applicationModel) {
+ String type = applicationModel.getApplicationConfigManager().getApplicationOrElseThrow().getMetadataType();
+ if (StringUtils.isEmpty(type)) {
+ type = DEFAULT_METADATA_STORAGE_TYPE;
+ }
+ return type;
+ }
+
+
+ public ConfigurableMetadataServiceExporter getMetadataServiceExporter() {
+ return metadataServiceExporter;
+ }
+
+ public void setMetadataServiceExporter(ConfigurableMetadataServiceExporter metadataServiceExporter) {
+ this.metadataServiceExporter = metadataServiceExporter;
+ }
+
+ @Override
+ public synchronized void onModuleStarted(ApplicationModel applicationModel) {
+ // start metadata service exporter
+ MetadataServiceDelegation metadataService = applicationModel.getBeanFactory().getOrRegisterBean(MetadataServiceDelegation.class);
+ if (metadataServiceExporter == null) {
+ metadataServiceExporter = new ConfigurableMetadataServiceExporter(applicationModel, metadataService);
+ // fixme, let's disable local metadata service export at this moment
+ if (!REMOTE_METADATA_STORAGE_TYPE.equals(getMetadataType(applicationModel))) {
+ metadataServiceExporter.export();
+ }
+ }
+ }
+
+
+ @Override
+ public synchronized void onStopped(ApplicationModel scopeModel) {
+ if (metadataServiceExporter != null && metadataServiceExporter.isExported()) {
+ try {
+ metadataServiceExporter.unexport();
+ } catch (Exception ignored) {
+ // ignored
+ }
+ }
+ }
+
+ @Override
+ public void onFailure(ApplicationModel scopeModel, Throwable cause) {
+
+ }
+
+ @Override
+ public int getPriority() {
+ return MAX_PRIORITY;
+ }
+}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceDelegation.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceDelegation.java
new file mode 100644
index 0000000000..b33d5608b2
--- /dev/null
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceDelegation.java
@@ -0,0 +1,228 @@
+/*
+ * 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.config.metadata;
+
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.logger.Logger;
+import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.resource.Disposable;
+import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.metadata.MetadataInfo;
+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 java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentNavigableMap;
+import java.util.concurrent.ConcurrentSkipListMap;
+
+import static java.util.Collections.emptySortedSet;
+import static java.util.Collections.unmodifiableSortedSet;
+import static org.apache.dubbo.common.URL.buildKey;
+import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;
+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, Disposable {
+ Logger logger = LoggerFactory.getLogger(getClass());
+ private final ApplicationModel applicationModel;
+ private final RegistryManager registryManager;
+ private final ConcurrentNavigableMap serviceDefinitions = new ConcurrentSkipListMap<>();
+ private URL url;
+
+ public MetadataServiceDelegation(ApplicationModel applicationModel) {
+ this.applicationModel = applicationModel;
+ registryManager = RegistryManager.getInstance(applicationModel);
+ }
+
+ /**
+ * Gets the current Dubbo Service name
+ *
+ * @return non-null
+ */
+ @Override
+ public String serviceName() {
+ return ApplicationModel.ofNullable(applicationModel).getApplicationName();
+ }
+
+ @Override
+ public URL getMetadataURL() {
+ return url;
+ }
+
+ public void setMetadataURL(URL url) {
+ this.url = url;
+ }
+
+ @Override
+ public SortedSet getSubscribedURLs() {
+ return getAllUnmodifiableSubscribedURLs();
+ }
+
+ private SortedSet getAllUnmodifiableServiceURLs() {
+ SortedSet bizURLs = new TreeSet<>(URLComparator.INSTANCE);
+ List serviceDiscoveries = registryManager.getServiceDiscoveries();
+ for (ServiceDiscovery sd : serviceDiscoveries) {
+ MetadataInfo metadataInfo = sd.getLocalMetadata();
+ Map> serviceURLs = metadataInfo.getExportedServiceURLs();
+ for (Map.Entry> entry : serviceURLs.entrySet()) {
+ SortedSet urls = entry.getValue();
+ if (urls != null) {
+ for (URL url : urls) {
+ if (!MetadataService.class.getName().equals(url.getServiceInterface())) {
+ bizURLs.add(url);
+ }
+ }
+ }
+ }
+ }
+ return MetadataService.toSortedStrings(bizURLs);
+ }
+
+ private SortedSet getAllUnmodifiableSubscribedURLs() {
+ SortedSet bizURLs = new TreeSet<>(URLComparator.INSTANCE);
+ List serviceDiscoveries = registryManager.getServiceDiscoveries();
+ for (ServiceDiscovery sd : serviceDiscoveries) {
+ MetadataInfo metadataInfo = sd.getLocalMetadata();
+ Map> serviceURLs = metadataInfo.getSubscribedServiceURLs();
+ for (Map.Entry> entry : serviceURLs.entrySet()) {
+ SortedSet urls = entry.getValue();
+ if (urls != null) {
+ for (URL url : urls) {
+ if (!MetadataService.class.getName().equals(url.getServiceInterface())) {
+ bizURLs.add(url);
+ }
+ }
+ }
+ }
+ }
+ return MetadataService.toSortedStrings(bizURLs);
+ }
+
+ @Override
+ public SortedSet getExportedURLs(String serviceInterface, String group, String version, String protocol) {
+ if (ALL_SERVICE_INTERFACES.equals(serviceInterface)) {
+ return getAllUnmodifiableServiceURLs();
+ }
+ String serviceKey = buildKey(serviceInterface, group, version);
+ return unmodifiableSortedSet(getServiceURLs(getAllServiceURLs(), serviceKey, protocol));
+ }
+
+ private Map> getAllServiceURLs () {
+ List serviceDiscoveries = registryManager.getServiceDiscoveries();
+ Map> allServiceURLs = new HashMap<>();
+ for (ServiceDiscovery sd : serviceDiscoveries) {
+ MetadataInfo metadataInfo = sd.getLocalMetadata();
+ Map> serviceURLs = metadataInfo.getExportedServiceURLs();
+ allServiceURLs.putAll(serviceURLs);
+ }
+ return allServiceURLs;
+ }
+
+ @Override
+ public Set getExportedServiceURLs() {
+ Set set = new HashSet<>();
+ registryManager.getRegistries();
+ for (Map.Entry> entry : getAllServiceURLs().entrySet()) {
+ set.addAll(entry.getValue());
+ }
+ return set;
+ }
+
+ @Override
+ public String getServiceDefinition(String interfaceName, String version, String group) {
+ return serviceDefinitions.get(URL.buildKey(interfaceName, group, version));
+ }
+
+ @Override
+ public String getServiceDefinition(String serviceKey) {
+ return serviceDefinitions.get(serviceKey);
+ }
+
+ @Override
+ public MetadataInfo getMetadataInfo(String revision) {
+ if (StringUtils.isEmpty(revision)) {
+ return null;
+ }
+
+ for (ServiceDiscovery sd : registryManager.getServiceDiscoveries()) {
+ MetadataInfo metadataInfo = sd.getLocalMetadata();
+ if (revision.equals(metadataInfo.getRevision())) {
+ return metadataInfo;
+ }
+ }
+
+ if (logger.isWarnEnabled()) {
+ logger.warn("metadata not found for revision: " + revision);
+ }
+ return null;
+ }
+
+ @Override
+ public List getMetadataInfos() {
+ List metadataInfos = new ArrayList<>();
+ for (ServiceDiscovery sd : registryManager.getServiceDiscoveries()) {
+ metadataInfos.add(sd.getLocalMetadata());
+ }
+ return metadataInfos;
+ }
+
+ private SortedSet getServiceURLs(Map> exportedServiceURLs, String serviceKey,
+ String protocol) {
+
+ SortedSet serviceURLs = exportedServiceURLs.get(serviceKey);
+
+ if (isEmpty(serviceURLs)) {
+ return emptySortedSet();
+ }
+
+ return MetadataService.toSortedStrings(serviceURLs.stream().filter(url -> isAcceptableProtocol(protocol, url)));
+ }
+
+ private boolean isAcceptableProtocol(String protocol, URL url) {
+ return protocol == null
+ || protocol.equals(url.getParameter(PROTOCOL_KEY))
+ || protocol.equals(url.getProtocol());
+ }
+
+ @Override
+ public void destroy() {
+
+ }
+
+
+ static class URLComparator implements Comparator {
+
+ public static final URLComparator INSTANCE = new URLComparator();
+
+ @Override
+ public int compare(URL o1, URL o2) {
+ return o1.toFullString().compareTo(o2.toFullString());
+ }
+ }
+}
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 56%
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 d584c74855..f8f016d9ef 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,12 +14,20 @@
* 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.metadata.WritableMetadataService;
+import org.apache.dubbo.common.BaseServiceMetadata;
+import org.apache.dubbo.common.URL;
+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;
import static org.apache.dubbo.common.utils.StringUtils.isBlank;
@@ -32,12 +40,12 @@ import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataU
public class MetadataServiceURLParamsMetadataCustomizer implements ServiceInstanceCustomizer {
@Override
- public void customize(ServiceInstance serviceInstance) {
+ public void customize(ServiceInstance serviceInstance, ApplicationModel applicationModel) {
Map metadata = serviceInstance.getMetadata();
String propertyName = resolveMetadataPropertyName(serviceInstance);
- String propertyValue = resolveMetadataPropertyValue(serviceInstance);
+ String propertyValue = resolveMetadataPropertyValue(applicationModel);
if (!isBlank(propertyName) && !isBlank(propertyValue)) {
metadata.put(propertyName, propertyValue);
@@ -48,8 +56,17 @@ public class MetadataServiceURLParamsMetadataCustomizer implements ServiceInstan
return METADATA_SERVICE_URL_PARAMS_PROPERTY_NAME;
}
- private String resolveMetadataPropertyValue(ServiceInstance serviceInstance) {
- WritableMetadataService writableMetadataService = WritableMetadataService.getDefaultExtension(serviceInstance.getApplicationModel());
- return getMetadataServiceParameter(writableMetadataService.getMetadataServiceURL());
+ private String resolveMetadataPropertyValue(ApplicationModel applicationModel) {
+ 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 metadataURLs = providerModel.getServiceConfig().getExportedUrls();
+ if (CollectionUtils.isNotEmpty(metadataURLs)) {
+ metadataValue = getMetadataServiceParameter(metadataURLs.get(0));
+ }
+ }
+ return metadataValue;
}
}
diff --git a/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.deploy.ApplicationDeployListener b/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.deploy.ApplicationDeployListener
new file mode 100644
index 0000000000..00747010b4
--- /dev/null
+++ b/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.deploy.ApplicationDeployListener
@@ -0,0 +1 @@
+exporter=org.apache.dubbo.config.metadata.ExporterDeployListener
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 2bda3f23b3..0000000000
--- 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 656f868dc3..f3cb706ad6 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 @@
-port=org.apache.dubbo.config.metadata.ServiceInstanceHostPortCustomizer
\ No newline at end of file
+metadata-url=org.apache.dubbo.config.metadata.MetadataServiceURLParamsMetadataCustomizer
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java
index ceb63d5827..2c75a185b6 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java
@@ -17,6 +17,7 @@
package org.apache.dubbo.config;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Test;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ApplicationConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ApplicationConfigTest.java
index 858fcf034a..7eb8c74cce 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ApplicationConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ApplicationConfigTest.java
@@ -18,6 +18,7 @@
package org.apache.dubbo.config;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigScopeModelInitializerTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigScopeModelInitializerTest.java
index a527097885..f80f546178 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigScopeModelInitializerTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigScopeModelInitializerTest.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.config;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.FrameworkModel;
import org.apache.dubbo.rpc.model.ModuleModel;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
index 1afaeab5cc..6bc617c975 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
@@ -20,6 +20,7 @@ package org.apache.dubbo.config;
import org.apache.dubbo.config.api.DemoService;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.rpc.model.ApplicationModel;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
index adae9ec88a..5677e67c44 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
@@ -20,6 +20,7 @@ package org.apache.dubbo.config;
import org.apache.dubbo.common.utils.NetUtils;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.config.context.ConfigManager;
+
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java
index 10186e1f31..d2b7ba5662 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java
@@ -21,8 +21,8 @@ import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.utils.UrlUtils;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.rpc.model.ApplicationModel;
-
import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
index ceb24b1f02..771d8d435b 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
@@ -17,7 +17,6 @@
package org.apache.dubbo.config;
-import com.google.common.collect.Lists;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.extension.ExtensionLoader;
import org.apache.dubbo.config.api.DemoService;
@@ -33,6 +32,8 @@ import org.apache.dubbo.rpc.Exporter;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Protocol;
import org.apache.dubbo.rpc.service.GenericService;
+
+import com.google.common.collect.Lists;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
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 15707bd5ea..7b79bf0ade 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
@@ -18,6 +18,7 @@ package org.apache.dubbo.config.bootstrap;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.constants.CommonConstants;
+import org.apache.dubbo.common.deploy.ApplicationDeployListener;
import org.apache.dubbo.common.url.component.ServiceConfigURL;
import org.apache.dubbo.common.utils.NetUtils;
import org.apache.dubbo.common.utils.ReflectUtils;
@@ -31,19 +32,18 @@ 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.metadata.ExporterDeployListener;
import org.apache.dubbo.config.provider.impl.DemoServiceImpl;
import org.apache.dubbo.config.utils.ConfigValidationUtils;
-import org.apache.dubbo.metadata.MetadataInfo;
import org.apache.dubbo.metadata.MetadataService;
-import org.apache.dubbo.metadata.MetadataServiceExporter;
-import org.apache.dubbo.metadata.WritableMetadataService;
import org.apache.dubbo.monitor.MonitorService;
import org.apache.dubbo.registry.RegistryService;
import org.apache.dubbo.rpc.Exporter;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol;
-
import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
@@ -249,7 +249,6 @@ public class DubboBootstrapTest {
ApplicationModel applicationModel = bootstrap.getApplicationModel();
DefaultApplicationDeployer applicationDeployer = getApplicationDeployer(applicationModel);
- Assertions.assertNotNull(ReflectUtils.getFieldValue(applicationDeployer, "serviceInstance"));
Assertions.assertNotNull(ReflectUtils.getFieldValue(applicationDeployer, "asyncMetadataFuture"));
Assertions.assertTrue(applicationModel.getDefaultModule().getServiceRepository().getExportedServices().size() > 0);
}
@@ -321,31 +320,27 @@ public class DubboBootstrapTest {
}
- private void assertMetadataService(DubboBootstrap bootstrap, int availablePort, boolean shouldReport) {
- DefaultApplicationDeployer applicationDeployer = getApplicationDeployer(bootstrap.getApplicationModel());
- MetadataServiceExporter metadataServiceExporter = ReflectUtils.getFieldValue(applicationDeployer, "metadataServiceExporter");
+ private ExporterDeployListener getListener(ApplicationModel model) {
+ return (ExporterDeployListener)model.getExtensionLoader(ApplicationDeployListener.class).getExtension("exporter");
+ }
+
+ private void assertMetadataService(DubboBootstrap bootstrap, int availablePort, boolean metadataExported) {
+ ExporterDeployListener listener = getListener(bootstrap.getApplicationModel());
+ ConfigurableMetadataServiceExporter metadataServiceExporter = listener.getMetadataServiceExporter();
+ Assertions.assertEquals(metadataExported, metadataServiceExporter.isExported());
DubboProtocol protocol = DubboProtocol.getDubboProtocol(bootstrap.getApplicationModel());
Map> exporters = protocol.getExporterMap();
-
- ServiceConfig serviceConfig = new ServiceConfig<>();
- serviceConfig.setRegistry(new RegistryConfig("N/A"));
- serviceConfig.setInterface(MetadataService.class);
- serviceConfig.setGroup(ApplicationModel.defaultModel().getCurrentConfig().getName());
- serviceConfig.setVersion(MetadataService.VERSION);
-
- WritableMetadataService metadataService = WritableMetadataService.getDefaultExtension(ApplicationModel.defaultModel());
- MetadataInfo metadataInfo = metadataService.getDefaultMetadataInfo();
-
- Assertions.assertNotNull(metadataInfo);
- if (shouldReport) {
- Assertions.assertTrue(metadataServiceExporter.isExported());
+ if (metadataExported) {
Assertions.assertEquals(2, exporters.size());
+
+ ServiceConfig serviceConfig = new ServiceConfig<>();
+ serviceConfig.setRegistry(new RegistryConfig("N/A"));
+ serviceConfig.setInterface(MetadataService.class);
+ serviceConfig.setGroup(ApplicationModel.defaultModel().getCurrentConfig().getName());
+ serviceConfig.setVersion(MetadataService.VERSION);
assertThat(exporters, hasEntry(is(serviceConfig.getUniqueServiceName() + ":" + availablePort), anything()));
- Assertions.assertFalse(metadataInfo.hasReported());
} else {
- Assertions.assertFalse(metadataServiceExporter.isExported());
Assertions.assertEquals(1, exporters.size());
- Assertions.assertTrue(metadataInfo.hasReported());
}
}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java
index b4f4698de8..1db759966c 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java
@@ -43,6 +43,7 @@ import org.apache.dubbo.rpc.model.ModuleModel;
import org.apache.dubbo.rpc.model.ServiceDescriptor;
import org.apache.dubbo.test.check.DubboTestChecker;
import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/AbstractInterfaceBuilderTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/AbstractInterfaceBuilderTest.java
index 092efae20a..157b73d318 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/AbstractInterfaceBuilderTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/AbstractInterfaceBuilderTest.java
@@ -23,8 +23,8 @@ import org.apache.dubbo.config.MetadataReportConfig;
import org.apache.dubbo.config.ModuleConfig;
import org.apache.dubbo.config.MonitorConfig;
import org.apache.dubbo.config.RegistryConfig;
-
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportmetadata/MultipleRegistryCenterExportMetadataIntegrationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportmetadata/MultipleRegistryCenterExportMetadataIntegrationTest.java
index 44684346a0..8d112692cb 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportmetadata/MultipleRegistryCenterExportMetadataIntegrationTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportmetadata/MultipleRegistryCenterExportMetadataIntegrationTest.java
@@ -17,10 +17,10 @@
package org.apache.dubbo.config.integration.multiple.exportmetadata;
import org.apache.dubbo.common.extension.ExtensionLoader;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.config.ServiceConfig;
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.ServiceListener;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.config.integration.IntegrationTest;
@@ -29,6 +29,7 @@ import org.apache.dubbo.rpc.Exporter;
import org.apache.dubbo.rpc.ExporterListener;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderIntegrationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderIntegrationTest.java
index 3f9a4c47db..a98fa5817c 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderIntegrationTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderIntegrationTest.java
@@ -34,6 +34,7 @@ import org.apache.dubbo.rpc.ExporterListener;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/injvm/MultipleRegistryCenterInjvmIntegrationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/injvm/MultipleRegistryCenterInjvmIntegrationTest.java
index 291f559787..cdc3adf10a 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/injvm/MultipleRegistryCenterInjvmIntegrationTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/injvm/MultipleRegistryCenterInjvmIntegrationTest.java
@@ -28,6 +28,7 @@ import org.apache.dubbo.config.integration.IntegrationTest;
import org.apache.dubbo.rpc.ExporterListener;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryIntegrationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryIntegrationTest.java
index aa61d4a629..1c2b154637 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryIntegrationTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryIntegrationTest.java
@@ -25,10 +25,11 @@ import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.config.integration.IntegrationTest;
+import org.apache.dubbo.config.metadata.MetadataServiceDelegation;
import org.apache.dubbo.registry.RegistryServiceListener;
-import org.apache.dubbo.registry.client.metadata.store.InMemoryWritableMetadataService;
-import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
import org.apache.dubbo.test.check.registrycenter.config.ZookeeperConfig;
+import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
@@ -172,15 +173,15 @@ public class MultipleRegistryCenterServiceDiscoveryRegistryIntegrationTest imple
Assertions.assertTrue(serviceDiscoveryRegistryInfoWrapper.isRegistered());
// check if it's subscribed
Assertions.assertFalse(serviceDiscoveryRegistryInfoWrapper.isSubscribed());
- InMemoryWritableMetadataService inMemoryWritableMetadataService = serviceDiscoveryRegistryInfoWrapper.getInMemoryWritableMetadataService();
+ MetadataServiceDelegation metadataService = DubboBootstrap.getInstance().getApplicationModel().getBeanFactory().getBean(MetadataServiceDelegation.class);
// 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(2, metadataService.getMetadataInfos().size());
}
}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryRegistryServiceListener.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryRegistryServiceListener.java
index 519f75a37e..f84a9b8765 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryRegistryServiceListener.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryRegistryServiceListener.java
@@ -18,11 +18,9 @@ package org.apache.dubbo.config.integration.multiple.servicediscoveryregistry;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.extension.Activate;
-import org.apache.dubbo.metadata.WritableMetadataService;
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.InMemoryWritableMetadataService;
import static org.apache.dubbo.config.integration.Constants.MULTIPLE_CONFIG_CENTER_SERVICE_DISCOVERY_REGISTRY;
@@ -43,7 +41,6 @@ public class MultipleRegistryCenterServiceDiscoveryRegistryRegistryServiceListen
serviceDiscoveryRegistryInfoWrapper.setHost(host);
serviceDiscoveryRegistryInfoWrapper.setPort(port);
serviceDiscoveryRegistryInfoWrapper.setServiceDiscoveryRegistry(serviceDiscoveryRegistry);
- serviceDiscoveryRegistryInfoWrapper.setInMemoryWritableMetadataService((InMemoryWritableMetadataService) WritableMetadataService.getDefaultExtension(url.getScopeModel()));
serviceDiscoveryRegistryInfoWrapper.setRegistered(true);
return serviceDiscoveryRegistryInfoWrapper;
}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/ServiceDiscoveryRegistryInfoWrapper.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/ServiceDiscoveryRegistryInfoWrapper.java
index a5f35f849c..be60e4ea83 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/ServiceDiscoveryRegistryInfoWrapper.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/ServiceDiscoveryRegistryInfoWrapper.java
@@ -16,17 +16,16 @@
*/
package org.apache.dubbo.config.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.InMemoryWritableMetadataService;
/**
* The instance to wrap {@link org.apache.dubbo.registry.client.ServiceDiscoveryRegistry}
- * and {@link org.apache.dubbo.registry.client.metadata.store.InMemoryWritableMetadataService}
*/
public class ServiceDiscoveryRegistryInfoWrapper {
private ServiceDiscoveryRegistry serviceDiscoveryRegistry;
- private InMemoryWritableMetadataService inMemoryWritableMetadataService;
+ private MetadataServiceDelegation inMemoryWritableMetadataService;
private boolean registered;
private boolean subscribed;
private String host;
@@ -40,14 +39,6 @@ public class ServiceDiscoveryRegistryInfoWrapper {
this.serviceDiscoveryRegistry = serviceDiscoveryRegistry;
}
- public InMemoryWritableMetadataService getInMemoryWritableMetadataService() {
- return inMemoryWritableMetadataService;
- }
-
- public void setInMemoryWritableMetadataService(InMemoryWritableMetadataService inMemoryWritableMetadataService) {
- this.inMemoryWritableMetadataService = inMemoryWritableMetadataService;
- }
-
public boolean isRegistered() {
return registered;
}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/SingleRegistryCenterDubboProtocolIntegrationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/SingleRegistryCenterDubboProtocolIntegrationTest.java
index 5b4b8ddc24..290c863a48 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/SingleRegistryCenterDubboProtocolIntegrationTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/SingleRegistryCenterDubboProtocolIntegrationTest.java
@@ -27,19 +27,20 @@ import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.config.ServiceListener;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.config.integration.IntegrationTest;
+import org.apache.dubbo.config.metadata.MetadataServiceDelegation;
import org.apache.dubbo.metadata.MetadataInfo;
-import org.apache.dubbo.metadata.WritableMetadataService;
+import org.apache.dubbo.metadata.MetadataService;
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.InMemoryWritableMetadataService;
import org.apache.dubbo.registry.client.migration.MigrationInvoker;
import org.apache.dubbo.registry.support.RegistryManager;
import org.apache.dubbo.registry.zookeeper.ZookeeperServiceDiscovery;
import org.apache.dubbo.rpc.cluster.Directory;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
@@ -172,8 +173,6 @@ public class SingleRegistryCenterDubboProtocolIntegrationTest implements Integra
* Protocol port is right or not
* ServiceDiscoveryRegistry's protocol is right or not
* Registered service in registry center is right or not
- * Exported url is right or not in InMemoryWritableMetadataService
- * MetadataInfo exists or not in InMemoryWritableMetadataService
* MetadataInfo has reported or not
* MetadataInfo has reported or not has service or not
* MetadataInfo's application name is right or not
@@ -224,24 +223,18 @@ public class SingleRegistryCenterDubboProtocolIntegrationTest implements Integra
Assertions.assertTrue(services.contains(PROVIDER_APPLICATION_NAME));
// obtain InMemoryWritableMetadataService instance
- InMemoryWritableMetadataService inMemoryWritableMetadataService = (InMemoryWritableMetadataService) WritableMetadataService.getDefaultExtension(serviceConfig.getScopeModel());
+ MetadataServiceDelegation inMemoryWritableMetadataService = (MetadataServiceDelegation) serviceConfig.getScopeModel().getBeanFactory().getBean(MetadataService.class);
// Exported url is right or not in InMemoryWritableMetadataService
Assertions.assertEquals(inMemoryWritableMetadataService.getExportedURLs().size(), 1);
// MetadataInfo exists or not in InMemoryWritableMetadataService
- Assertions.assertFalse(inMemoryWritableMetadataService.getMetadataInfos().values().isEmpty());
- // get MetadataInfo
- MetadataInfo metadataInfo = inMemoryWritableMetadataService.getMetadataInfos().get("default");
- // MetadataInfo exists or not in InMemoryWritableMetadataService
- Assertions.assertNotNull(metadataInfo);
- // MetadataInfo has reported or not
- Assertions.assertFalse(metadataInfo.hasReported());
+ Assertions.assertFalse(inMemoryWritableMetadataService.getMetadataInfos().isEmpty());
// MetadataInfo has reported or not has service or not
- Assertions.assertFalse(metadataInfo.getServices().isEmpty());
+ Assertions.assertFalse(inMemoryWritableMetadataService.getMetadataInfos().get(0).getServices().isEmpty());
// MetadataInfo has reported or not has service or not
- Assertions.assertEquals(metadataInfo.getServices().size(), 1);
+ Assertions.assertEquals(inMemoryWritableMetadataService.getMetadataInfos().get(0).getServices().size(), 1);
// obtain the service's key
String key = SingleRegistryCenterIntegrationService.class.getName() + ":" + PROTOCOL_NAME;
- MetadataInfo.ServiceInfo serviceInfo = metadataInfo.getServices().get(key);
+ MetadataInfo.ServiceInfo serviceInfo = inMemoryWritableMetadataService.getMetadataInfos().get(0).getServices().get(key);
// MetadataInfo's service exists or not
Assertions.assertNotNull(serviceInfo);
// The name of MetadataInfo's service is right or not
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/exportmetadata/SingleRegistryCenterExportMetadataIntegrationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/exportmetadata/SingleRegistryCenterExportMetadataIntegrationTest.java
index bfab1a6ef1..6f2f3e6677 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/exportmetadata/SingleRegistryCenterExportMetadataIntegrationTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/exportmetadata/SingleRegistryCenterExportMetadataIntegrationTest.java
@@ -17,10 +17,10 @@
package org.apache.dubbo.config.integration.single.exportmetadata;
import org.apache.dubbo.common.extension.ExtensionLoader;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.config.ServiceConfig;
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.ServiceListener;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.config.integration.IntegrationTest;
@@ -29,6 +29,7 @@ import org.apache.dubbo.rpc.Exporter;
import org.apache.dubbo.rpc.ExporterListener;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/exportprovider/SingleRegistryCenterExportProviderIntegrationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/exportprovider/SingleRegistryCenterExportProviderIntegrationTest.java
index 3c9b9cb3cd..16398b1436 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/exportprovider/SingleRegistryCenterExportProviderIntegrationTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/exportprovider/SingleRegistryCenterExportProviderIntegrationTest.java
@@ -34,6 +34,7 @@ import org.apache.dubbo.rpc.ExporterListener;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/injvm/SingleRegistryCenterInjvmIntegrationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/injvm/SingleRegistryCenterInjvmIntegrationTest.java
index 4e1bab97f6..fc414df712 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/injvm/SingleRegistryCenterInjvmIntegrationTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/injvm/SingleRegistryCenterInjvmIntegrationTest.java
@@ -28,6 +28,7 @@ import org.apache.dubbo.config.integration.IntegrationTest;
import org.apache.dubbo.rpc.ExporterListener;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/MetadataServiceExporterTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/MetadataServiceExporterTest.java
deleted file mode 100644
index da704e4332..0000000000
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/MetadataServiceExporterTest.java
+++ /dev/null
@@ -1,252 +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.config.metadata;
-
-import org.apache.dubbo.common.URL;
-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.provider.impl.DemoServiceImpl;
-import org.apache.dubbo.metadata.MetadataService;
-import org.apache.dubbo.metadata.MetadataServiceExporter;
-import org.apache.dubbo.rpc.model.ApplicationModel;
-import org.apache.dubbo.rpc.model.FrameworkModel;
-import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-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
- public void init() {
- DubboBootstrap.reset();
-
- ApplicationConfig applicationConfig = new ApplicationConfig("Test");
- applicationConfig.setRegisterConsumer(true);
- ApplicationModel.defaultModel().getApplicationConfigManager().setApplication(applicationConfig);
- ApplicationModel.defaultModel().getApplicationConfigManager().addRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
- ApplicationModel.defaultModel().getApplicationConfigManager().addProtocol(new ProtocolConfig("injvm"));
- }
-
- @Test
- public void test() {
- MetadataService metadataService = Mockito.mock(MetadataService.class);
- ConfigurableMetadataServiceExporter exporter = new ConfigurableMetadataServiceExporter();
- 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();
- 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());
- }
-
- /**
- * test reuse of port started by normal service
- */
- @Test
- public void testPortReuse() throws Exception {
- DubboBootstrap providerBootstrap = DubboBootstrap.newInstance();
- ServiceConfig serviceConfig = new ServiceConfig<>();
- serviceConfig.setInterface(DemoService.class);
- serviceConfig.setRef(new DemoServiceImpl());
-
- ApplicationConfig applicationConfig = new ApplicationConfig("exporter-test");
- applicationConfig.setMetadataType(DEFAULT_METADATA_STORAGE_TYPE);
-
- providerBootstrap
- .application(applicationConfig)
- .registry(registryConfig)
- .protocol(new ProtocolConfig("dubbo", 2002))
- .service(serviceConfig);
-
- // will start exporter
- providerBootstrap.start();
- ConfigurableMetadataServiceExporter exporter = (ConfigurableMetadataServiceExporter) providerBootstrap.getApplicationModel().getExtensionLoader(MetadataServiceExporter.class).getDefaultExtension();
-
- try {
- assertTrue(exporter.isExported());
- List urls = exporter.getExportedURLs();
- assertNotNull(urls);
- assertEquals(2002, urls.get(0).getPort());
- assertEquals(DUBBO_PROTOCOL, urls.get(0).getProtocol());
- } finally {
- providerBootstrap.stop();
- }
- assertFalse(exporter.isExported());
- }
-
- /**
- * test user specified port and protocol
- * @throws Exception
- */
- @Test
- public void testSpecifiedPortAndProtocol() throws Exception {
- DubboBootstrap providerBootstrap = DubboBootstrap.newInstance();
- ServiceConfig serviceConfig = new ServiceConfig<>();
- serviceConfig.setInterface(DemoService.class);
- serviceConfig.setRef(new DemoServiceImpl());
-
- ApplicationConfig applicationConfig = new ApplicationConfig("exporter-test");
- applicationConfig.setMetadataType(DEFAULT_METADATA_STORAGE_TYPE);
- applicationConfig.setMetadataServiceProtocol("tri");
- applicationConfig.setMetadataServicePort(8089);
-
- providerBootstrap
- .application(applicationConfig)
- .registry(registryConfig)
- .protocol(new ProtocolConfig("dubbo", 2002))
- .service(serviceConfig);
-
- // will start exporter.export()
- providerBootstrap.start();
- ConfigurableMetadataServiceExporter exporter = (ConfigurableMetadataServiceExporter) providerBootstrap.getApplicationModel().getExtensionLoader(MetadataServiceExporter.class).getDefaultExtension();
-
- try {
- assertTrue(exporter.isExported());
- List urls = exporter.getExportedURLs();
- assertNotNull(urls);
- assertEquals(8089, urls.get(0).getPort());
- assertEquals("tri", urls.get(0).getProtocol());
- } finally {
- providerBootstrap.stop();
- }
- assertFalse(exporter.isExported());
- }
-
- @Test
- public void testMetadataStartsBeforeNormalService() throws Exception {
- DubboBootstrap providerBootstrap = DubboBootstrap.newInstance();
- ServiceConfig serviceConfig = new ServiceConfig<>();
- serviceConfig.setInterface(DemoService.class);
- serviceConfig.setRef(new DemoServiceImpl());
- serviceConfig.setDelay(1000);
-
- ApplicationConfig applicationConfig = new ApplicationConfig("exporter-test");
- applicationConfig.setMetadataType(DEFAULT_METADATA_STORAGE_TYPE);
-// applicationConfig.setMetadataServiceProtocol("triple");
-// applicationConfig.setMetadataServicePort(8089);
-
- providerBootstrap
- .application(applicationConfig)
- .registry(registryConfig)
- .protocol(new ProtocolConfig("dubbo", 2002))
- .service(serviceConfig);
-
- // will start exporter.export()
- providerBootstrap.start();
- ConfigurableMetadataServiceExporter exporter = (ConfigurableMetadataServiceExporter) providerBootstrap.getApplicationModel().getExtensionLoader(MetadataServiceExporter.class).getDefaultExtension();
-
- try {
- assertTrue(exporter.isExported());
- List urls = exporter.getExportedURLs();
- assertNotNull(urls);
- assertNotEquals(2002, urls.get(0).getPort());
- assertEquals("dubbo", urls.get(0).getProtocol());
- } finally {
- providerBootstrap.stop();
- }
- assertFalse(exporter.isExported());
- }
-//
-// /**
-// * test multiple protocols
-// * @throws Exception
-// */
-// @Test
-// public void testMultiProtocols() throws Exception {
-// DubboBootstrap providerBootstrap = DubboBootstrap.newInstance();
-// ServiceConfig serviceConfig = new ServiceConfig<>();
-// serviceConfig.setInterface(DemoService.class);
-// serviceConfig.setRef(new DemoServiceImpl());
-//
-// providerBootstrap
-// .application("provider-app")
-// .registry(registryConfig)
-// .protocol(new ProtocolConfig("dubbo", 2002))
-// .service(serviceConfig);
-//
-// ConfigurableMetadataServiceExporter exporter = (ConfigurableMetadataServiceExporter) applicationModel.getExtensionLoader(MetadataServiceExporter.class).getDefaultExtension();
-// MetadataService metadataService = Mockito.mock(MetadataService.class);
-// exporter.setMetadataService(metadataService);
-//
-// try {
-// providerBootstrap.start();
-// assertTrue(exporter.isExported());
-// assertTrue(exporter.supports(DEFAULT_METADATA_STORAGE_TYPE));
-// assertTrue(exporter.supports(REMOTE_METADATA_STORAGE_TYPE));
-// assertTrue(exporter.supports(COMPOSITE_METADATA_STORAGE_TYPE));
-// } finally {
-// providerBootstrap.stop();
-// }
-// assertFalse(exporter.isExported());
-// }
-
- private static RegistryConfig registryConfig;
-
- @BeforeAll
- public static void beforeAll() {
- FrameworkModel.destroyAll();
- registryConfig = new RegistryConfig(ZookeeperRegistryCenterConfig.getConnectionAddress());
- // pre-check threads
- //precheckUnclosedThreads();
- }
-
-}
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 50%
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 f3ea39d680..d3fe734c82 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,43 +14,46 @@
* 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.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.provider.impl.DemoServiceImpl;
+import org.apache.dubbo.registry.client.DefaultServiceInstance;
+import org.apache.dubbo.rpc.model.ApplicationModel;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.metadata.MetadataService;
-import org.apache.dubbo.metadata.WritableMetadataService;
-import org.apache.dubbo.registry.client.DefaultServiceInstance;
-import org.apache.dubbo.registry.client.metadata.store.InMemoryWritableMetadataService;
-import org.apache.dubbo.rpc.model.ApplicationModel;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.mockito.MockedStatic;
import org.mockito.Mockito;
import java.io.IOException;
import java.util.Map;
import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.PORT_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.TIMESTAMP_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.METADATA_SERVICE_URL_PARAMS_PROPERTY_NAME;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
public class MetadataServiceURLParamsMetadataCustomizerTest {
private static final Gson gson = new Gson();
public DefaultServiceInstance instance;
- private InMemoryWritableMetadataService 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");
+ private URL metadataServiceURL = URL.valueOf("dubbo://10.225.12.124:20880/org.apache.dubbo.metadata.MetadataService" +
+ "?application=MetadataServiceURLParamsMetadataCustomizerTest&group=MetadataServiceURLParamsMetadataCustomizerTest" +
+ "&interface=org.apache.dubbo.metadata.MetadataService&side=provider×tamp=1637573430740&version=1.0.0");
public static DefaultServiceInstance createInstance() {
@@ -60,8 +63,6 @@ public class MetadataServiceURLParamsMetadataCustomizerTest {
@BeforeEach
public void init() {
instance = createInstance();
- metadataService = mock(InMemoryWritableMetadataService.class);
- when(metadataService.getMetadataServiceURL()).thenReturn(metadataServiceURL);
}
@AfterEach
@@ -71,22 +72,38 @@ public class MetadataServiceURLParamsMetadataCustomizerTest {
@Test
public void test() {
+ DubboBootstrap providerBootstrap = DubboBootstrap.newInstance();
+ ServiceConfig serviceConfig = new ServiceConfig<>();
+ serviceConfig.setInterface(DemoService.class);
+ serviceConfig.setRef(new DemoServiceImpl());
+ serviceConfig.setDelay(1000);
+
+ ApplicationConfig applicationConfig = new ApplicationConfig("MetadataServiceURLParamsMetadataCustomizerTest");
+ applicationConfig.setMetadataType(DEFAULT_METADATA_STORAGE_TYPE);
+
+ providerBootstrap
+ .application(applicationConfig)
+ .registry(new RegistryConfig("N/A"))
+ .protocol(new ProtocolConfig("dubbo", 2002))
+ .service(serviceConfig);
+
+ // will start exporter.export()
+ providerBootstrap.start();
+
+ ApplicationModel applicationModel = providerBootstrap.getApplicationModel();
MetadataServiceURLParamsMetadataCustomizer customizer = new MetadataServiceURLParamsMetadataCustomizer();
- try (MockedStatic mockMetadataService = Mockito.mockStatic(WritableMetadataService.class)) {
- mockMetadataService.when(() -> WritableMetadataService.getDefaultExtension(ApplicationModel.defaultModel())).thenReturn(metadataService);
- customizer.customize(instance);
+ customizer.customize(instance, applicationModel);
- String val = instance.getMetadata().get(METADATA_SERVICE_URL_PARAMS_PROPERTY_NAME);
- Assertions.assertNotNull(val);
+ String val = instance.getMetadata().get(METADATA_SERVICE_URL_PARAMS_PROPERTY_NAME);
+ Assertions.assertNotNull(val);
- Map map = gson.fromJson(val, new TypeToken