This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch 3.0 in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit c682389634fed5f6b13bb6de0ab88e5757a7fe44 Author: ken.lj <[email protected]> AuthorDate: Mon Jun 15 13:41:07 2020 +0800 metadata read & write --- .../dubbo/config/bootstrap/DubboBootstrap.java | 4 +- .../metadata/DefaultMetadataParamsFilter.java | 3 + .../org/apache/dubbo/metadata/MetadataInfo.java | 47 +++-- .../apache/dubbo/metadata/RevisionResolver.java | 2 + .../dubbo/metadata/WritableMetadataService.java | 6 +- .../org/apache/dubbo/metadata/DemoService.java | 30 ++- .../apache/dubbo/metadata/MetadataInfoTest.java | 27 ++- .../dubbo/metadata/URLRevisionResolverTest.java | 50 ----- .../store/InMemoryWritableMetadataServiceTest.java | 111 ----------- .../RemoteWritableMetadataServiceDelegateTest.java | 216 --------------------- .../store/RemoteWritableMetadataServiceTest.java | 188 ------------------ .../registry/client/ServiceDiscoveryRegistry.java | 3 +- ...MetadataServiceURLParamsMetadataCustomizer.java | 8 +- .../registry/client/metadata/MetadataUtils.java | 16 +- .../metadata/ProtocolPortsMetadataCustomizer.java | 7 +- .../metadata/store/RemoteMetadataServiceImpl.java | 10 +- ...g.apache.dubbo.metadata.WritableMetadataService | 1 + ...ient.metadata.proxy.MetadataServiceProxyFactory | 3 - .../registry/nacos/NacosServiceDiscovery.java | 3 +- 19 files changed, 84 insertions(+), 651 deletions(-) diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java index 3bdffa9..dd28b81 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java @@ -97,7 +97,7 @@ import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE; import static org.apache.dubbo.common.function.ThrowableAction.execute; import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty; -import static org.apache.dubbo.metadata.WritableMetadataService.getExtension; +import static org.apache.dubbo.metadata.WritableMetadataService.getDefaultExtension; import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.setMetadataStorageType; import static org.apache.dubbo.remoting.Constants.CLIENT_KEY; @@ -718,7 +718,7 @@ public class DubboBootstrap extends GenericEventListener { */ private void initMetadataService() { startMetadataReport(); - this.metadataService = getExtension(getMetadataType()); + this.metadataService = getDefaultExtension(); this.metadataServiceExporter = new ConfigurableMetadataServiceExporter(metadataService); } diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DefaultMetadataParamsFilter.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DefaultMetadataParamsFilter.java index 7f4b85c..0563e43 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DefaultMetadataParamsFilter.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DefaultMetadataParamsFilter.java @@ -16,6 +16,8 @@ */ package org.apache.dubbo.metadata; +import org.apache.dubbo.common.extension.Activate; + import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY; import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY; import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY; @@ -35,6 +37,7 @@ import static org.apache.dubbo.rpc.Constants.TOKEN_KEY; import static org.apache.dubbo.rpc.cluster.Constants.WARMUP_KEY; import static org.apache.dubbo.rpc.cluster.Constants.WEIGHT_KEY; +@Activate public class DefaultMetadataParamsFilter implements MetadataParamsFilter { @Override public String[] include() { diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java index bf9aa68..01e3c09 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java @@ -17,15 +17,19 @@ package org.apache.dubbo.metadata; import org.apache.dubbo.common.URL; +import org.apache.dubbo.common.compiler.support.ClassUtils; import org.apache.dubbo.common.extension.ExtensionLoader; import org.apache.dubbo.common.utils.ArrayUtils; import org.apache.dubbo.common.utils.StringUtils; import java.io.Serializable; +import java.lang.reflect.Method; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.SortedSet; +import java.util.TreeSet; import static org.apache.dubbo.common.constants.CommonConstants.DOT_SEPARATOR; import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPERATOR; @@ -39,6 +43,7 @@ public class MetadataInfo implements Serializable { private Map<String, ServiceInfo> services; public MetadataInfo() { + this.services = new HashMap<>(); } public MetadataInfo(String app, String revision, Map<String, ServiceInfo> services) { @@ -68,15 +73,6 @@ public class MetadataInfo implements Serializable { this.services.remove(key); } - public String revision() { - StringBuilder sb = new StringBuilder(); - sb.append(app); - for (Map.Entry<String, ServiceInfo> entry : services.entrySet()) { - sb.append(entry.getValue().toString()); - } - return RevisionResolver.calRevision(sb.toString()); - } - public String getApp() { return app; } @@ -86,6 +82,15 @@ public class MetadataInfo implements Serializable { } public String getRevision() { + if (revision != null) { + return revision; + } + StringBuilder sb = new StringBuilder(); + sb.append(app); + for (Map.Entry<String, ServiceInfo> entry : services.entrySet()) { + sb.append(entry.getValue().toDescString()); + } + this.revision = RevisionResolver.calRevision(sb.toString()); return revision; } @@ -159,10 +164,12 @@ public class MetadataInfo implements Serializable { params.put(p, value); } String[] methods = url.getParameter(METHODS_KEY, (String[]) null); - for (String method : methods) { - String mValue = url.getMethodParameter(method, p); - if (StringUtils.isNotEmpty(mValue)) { - params.put(method + DOT_SEPARATOR + p, mValue); + if (methods != null) { + for (String method : methods) { + String mValue = url.getMethodParameter(method, p); + if (StringUtils.isNotEmpty(mValue)) { + params.put(method + DOT_SEPARATOR + p, mValue); + } } } } @@ -277,5 +284,19 @@ public class MetadataInfo implements Serializable { } return value == null ? defaultValue : value; } + + public String toDescString() { + return this.getMatchKey() + getMethodSignaturesString() + getParams(); + } + + private String getMethodSignaturesString() { + SortedSet<String> methodStrings = new TreeSet(); + + Method[] methods = ClassUtils.forName(name).getMethods(); + for (Method method : methods) { + methodStrings.add(method.toString()); + } + return methodStrings.toString(); + } } } diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/RevisionResolver.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/RevisionResolver.java index 76d8cfb..f8ebd3b 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/RevisionResolver.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/RevisionResolver.java @@ -54,4 +54,6 @@ public class RevisionResolver { } return new String(str); } + + } diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/WritableMetadataService.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/WritableMetadataService.java index b453842..0de9683 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/WritableMetadataService.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/WritableMetadataService.java @@ -18,6 +18,7 @@ package org.apache.dubbo.metadata; import org.apache.dubbo.common.URL; import org.apache.dubbo.common.extension.ExtensionLoader; +import org.apache.dubbo.common.extension.SPI; import org.apache.dubbo.rpc.model.ApplicationModel; import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader; @@ -28,6 +29,7 @@ import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoad * * @since 2.7.5 */ +@SPI("default") public interface WritableMetadataService extends MetadataService { /** * Gets the current Dubbo Service name @@ -81,8 +83,4 @@ public interface WritableMetadataService extends MetadataService { static WritableMetadataService getDefaultExtension() { return getExtensionLoader(WritableMetadataService.class).getDefaultExtension(); } - - static WritableMetadataService getExtension(String name) { - return getExtensionLoader(WritableMetadataService.class).getOrDefaultExtension(name); - } } diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/event/listener/CustomizableServiceInstanceListenerTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/DemoService.java similarity index 53% copy from dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/event/listener/CustomizableServiceInstanceListenerTest.java copy to dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/DemoService.java index bf8d9d2..33bcbc7 100644 --- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/event/listener/CustomizableServiceInstanceListenerTest.java +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/DemoService.java @@ -14,26 +14,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.registry.client.event.listener; +package org.apache.dubbo.metadata; -import org.apache.dubbo.registry.client.DefaultServiceInstanceTest; -import org.apache.dubbo.registry.client.event.ServiceInstancePreRegisteredEvent; +import org.apache.dubbo.metadata.rest.User; + +import java.util.List; -import org.junit.jupiter.api.Test; /** - * {@link CustomizableServiceInstanceListener} Test - * - * @since 2.7.5 + * DemoService */ -public class CustomizableServiceInstanceListenerTest { +public interface DemoService { + + String sayName(String name); + + void throwRuntimeException() throws RuntimeException; + + List<User> getUsers(List<User> users); - private CustomizableServiceInstanceListener listener = new CustomizableServiceInstanceListener(); + int echo(int i); - @Test - public void testOnEvent() { - ServiceInstancePreRegisteredEvent event = new ServiceInstancePreRegisteredEvent(this, DefaultServiceInstanceTest.createInstance()); - // breaking test - listener.onEvent(event); - } -} +} \ No newline at end of file diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/event/listener/CustomizableServiceInstanceListenerTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataInfoTest.java similarity index 56% rename from dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/event/listener/CustomizableServiceInstanceListenerTest.java rename to dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataInfoTest.java index bf8d9d2..1d2f42e 100644 --- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/event/listener/CustomizableServiceInstanceListenerTest.java +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataInfoTest.java @@ -14,26 +14,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.registry.client.event.listener; +package org.apache.dubbo.metadata; -import org.apache.dubbo.registry.client.DefaultServiceInstanceTest; -import org.apache.dubbo.registry.client.event.ServiceInstancePreRegisteredEvent; +import org.apache.dubbo.common.URL; import org.junit.jupiter.api.Test; -/** - * {@link CustomizableServiceInstanceListener} Test - * - * @since 2.7.5 - */ -public class CustomizableServiceInstanceListenerTest { +public class MetadataInfoTest { + @Test + public void revisionTest() { + MetadataInfo metadataInfo = new MetadataInfo(); + metadataInfo.setApp("demo"); - private CustomizableServiceInstanceListener listener = new CustomizableServiceInstanceListener(); + URL url = URL.valueOf("dubbo://10.230.11.211:20880/org.apache.dubbo.metadata.DemoService?timeout=1000&testKey=aaa"); + MetadataInfo.ServiceInfo serviceInfo = new MetadataInfo.ServiceInfo(url); + metadataInfo.addService(serviceInfo); - @Test - public void testOnEvent() { - ServiceInstancePreRegisteredEvent event = new ServiceInstancePreRegisteredEvent(this, DefaultServiceInstanceTest.createInstance()); - // breaking test - listener.onEvent(event); + System.out.println(serviceInfo.toDescString()); + System.out.println(metadataInfo.getRevision()); } } diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/URLRevisionResolverTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/URLRevisionResolverTest.java deleted file mode 100644 index b36ebcb..0000000 --- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/URLRevisionResolverTest.java +++ /dev/null @@ -1,50 +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 java.util.Arrays; -import java.util.Collection; - -import static java.util.Arrays.asList; -import static org.apache.dubbo.metadata.URLRevisionResolver.UNKNOWN_REVISION; -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * {@link URLRevisionResolver} Test - * - * @since 2.7.5 - */ -public class URLRevisionResolverTest { - - private static final String URL = "dubbo://192.168.0.102:20881/org.apache.dubbo.metadata.URLRevisionResolverTest"; - - private final URLRevisionResolver resolver = URLRevisionResolver.INSTANCE; - - @Test - public void testResolve() { - String revision = resolver.resolve(Arrays.<String>asList()); - assertEquals(UNKNOWN_REVISION, revision); - - revision = resolver.resolve((Collection<String>) null); - assertEquals(UNKNOWN_REVISION, revision); - - revision = resolver.resolve(asList(URL)); - assertEquals("2ca0638f189ce569", revision); - } -} diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/store/InMemoryWritableMetadataServiceTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/store/InMemoryWritableMetadataServiceTest.java deleted file mode 100644 index b7db3fb..0000000 --- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/store/InMemoryWritableMetadataServiceTest.java +++ /dev/null @@ -1,111 +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. - */ - -/* - * 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.store; - -import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.utils.NetUtils; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -/** - * 2019-08-29 - */ -public class InMemoryWritableMetadataServiceTest { - - String interfaceName = "org.apache.dubbo.metadata.store.InterfaceNameTestService2", version = "0.9.9", group = null; - URL url = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/?interface=" + interfaceName + "&version=" - + version + "&application=vicpubprovder&side=provider"); - - @BeforeEach - public void before() { - } - - @Test - public void testPublishServiceDefinition() { - InMemoryWritableMetadataService inMemoryWritableMetadataService = new InMemoryWritableMetadataService(); - inMemoryWritableMetadataService.publishServiceDefinition(url); - - String v = inMemoryWritableMetadataService.getServiceDefinition(interfaceName, version, group); - Assertions.assertNotNull(v); - } - - @Test - public void testExportURL() { - InMemoryWritableMetadataService inMemoryWritableMetadataService = new InMemoryWritableMetadataService(); - URL url = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.Test567Service?version=1.0.44&application=vicpubprovder&side=provider"); - inMemoryWritableMetadataService.exportURL(url); - - Assertions.assertTrue(inMemoryWritableMetadataService.getExportedServiceURLs().size() == 1); - Assertions.assertEquals(inMemoryWritableMetadataService.getExportedServiceURLs().get(url.getServiceKey()).first(), url); - } - - @Test - public void testSubscribeURL() { - InMemoryWritableMetadataService inMemoryWritableMetadataService = new InMemoryWritableMetadataService(); - URL url = URL.valueOf("subscriber://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.Test678Service?version=1.0.44&application=vicpubprovder&side=provider"); - inMemoryWritableMetadataService.subscribeURL(url); - - Assertions.assertTrue(inMemoryWritableMetadataService.getSubscribedServiceURLs().size() == 1); - Assertions.assertEquals(inMemoryWritableMetadataService.getSubscribedServiceURLs().get(url.getServiceKey()).first(), url); - } - - @Test - public void testUnExportURL() { - InMemoryWritableMetadataService inMemoryWritableMetadataService = new InMemoryWritableMetadataService(); - URL url = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.Test567Service?version=1.0.44&application=vicpubprovder&side=provider"); - inMemoryWritableMetadataService.exportURL(url); - - Assertions.assertTrue(inMemoryWritableMetadataService.getExportedServiceURLs().size() == 1); - Assertions.assertEquals(inMemoryWritableMetadataService.getExportedServiceURLs().get(url.getServiceKey()).first(), url); - - inMemoryWritableMetadataService.unexportURL(url); - Assertions.assertTrue(inMemoryWritableMetadataService.getExportedServiceURLs().size() == 0); - } - - @Test - public void testUnSubscribeURL() { - InMemoryWritableMetadataService inMemoryWritableMetadataService = new InMemoryWritableMetadataService(); - URL url = URL.valueOf("subscriber://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.Test678Service?version=1.0.44&application=vicpubprovder&side=provider"); - inMemoryWritableMetadataService.subscribeURL(url); - - Assertions.assertTrue(inMemoryWritableMetadataService.getSubscribedServiceURLs().size() == 1); - Assertions.assertEquals(inMemoryWritableMetadataService.getSubscribedServiceURLs().get(url.getServiceKey()).first(), url); - - inMemoryWritableMetadataService.unsubscribeURL(url); - Assertions.assertTrue(inMemoryWritableMetadataService.getSubscribedServiceURLs().size() == 0); - } - -} diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/store/RemoteWritableMetadataServiceDelegateTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/store/RemoteWritableMetadataServiceDelegateTest.java deleted file mode 100644 index 7c95e31..0000000 --- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/store/RemoteWritableMetadataServiceDelegateTest.java +++ /dev/null @@ -1,216 +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. - */ - -/* - * 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.store; - -import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.utils.NetUtils; -import org.apache.dubbo.metadata.WritableMetadataService; -import org.apache.dubbo.metadata.report.MetadataReportInstance; -import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum; -import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier; -import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier; -import org.apache.dubbo.metadata.test.JTestMetadataReport4Test; -import org.apache.dubbo.rpc.model.ApplicationModel; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.util.SortedSet; - - -/** - * 2019-08-27 - */ -public class RemoteWritableMetadataServiceDelegateTest { - static URL metadataURL = URL.valueOf("JTest://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.Tes33tService?version=1.0.0&application=vic"); - - RemoteWritableMetadataServiceDelegate metadataReportService; - - String interfaceName = "org.apache.dubbo.metadata.store.InterfaceNameTestService80", version = "0.6.9", group = null; - URL url = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/?interface=" + interfaceName + "&version=" - + version + "&application=vicpubprovder&side=provider"); - - @BeforeAll - public static void beforeAll() { - MetadataReportInstance.init(metadataURL); - } - - @BeforeEach - public void before() { - metadataReportService = new RemoteWritableMetadataServiceDelegate(); - } - - - @Test - public void testInstance() { - WritableMetadataService metadataReportService1 = WritableMetadataService.getExtension("remote"); - WritableMetadataService metadataReportService2 = WritableMetadataService.getExtension("remote"); - Assertions.assertSame(metadataReportService1, metadataReportService2); - Assertions.assertTrue(metadataReportService1 instanceof RemoteWritableMetadataServiceDelegate); - } - - @Test - public void testPublishServiceDefinition() throws InterruptedException { - String interfaceName = "org.apache.dubbo.metadata.store.InterfaceNameTestService2", version = "0.9.9", group = null; - URL tmpUrl = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/?interface=" + interfaceName + "&version=" - + version + "&application=vicpubprovder&side=provider"); - metadataReportService.publishServiceDefinition(tmpUrl); - Thread.sleep(150); - String v = metadataReportService.getServiceDefinition(interfaceName, version, group); - Assertions.assertNotNull(v); - } - - @Test - public void testExportURL() throws InterruptedException { - URL url = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.Test567Service?version=1.0.44&application=vicpubprovder&side=provider"); - metadataReportService.exportURL(url); - Thread.sleep(100); - Assertions.assertTrue(getInMemoryWriableMetadataService().exportedServiceURLs.size() == 1); - Assertions.assertEquals(getInMemoryWriableMetadataService().exportedServiceURLs.get(url.getServiceKey()).first(), url); - } - - @Test - public void testSubscribeURL() throws InterruptedException { - URL url = URL.valueOf("subscriber://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.Test0678Service?version=1.3.144&application=vicpubprovder&side=provider"); - int origSize = getInMemoryWriableMetadataService().subscribedServiceURLs.size(); - metadataReportService.subscribeURL(url); - Thread.sleep(100); - int size = getInMemoryWriableMetadataService().subscribedServiceURLs.size(); - Assertions.assertTrue(size - origSize == 1); - Assertions.assertEquals(getInMemoryWriableMetadataService().subscribedServiceURLs.get(url.getServiceKey()).first(), url); - } - - @Test - public void testUnExportURL() throws InterruptedException { - URL url = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.Test0567Service?version=1.2.44&application=vicpubprovder&side=provider"); - int origSize = getInMemoryWriableMetadataService().exportedServiceURLs.size(); - metadataReportService.exportURL(url); - Thread.sleep(100); - int size = getInMemoryWriableMetadataService().exportedServiceURLs.size(); - Assertions.assertTrue(size - origSize == 1); - Assertions.assertEquals(getInMemoryWriableMetadataService().exportedServiceURLs.get(url.getServiceKey()).first(), url); - - metadataReportService.unexportURL(url); - int unexportSize = getInMemoryWriableMetadataService().exportedServiceURLs.size(); - Assertions.assertTrue(size - unexportSize == 1); - } - - @Test - public void testUnSubscribeURL() throws InterruptedException { - URL url = URL.valueOf("subscriber://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.Test0678Service?version=1.5.477&application=vicpubprovder&side=provider"); - int origSize = getInMemoryWriableMetadataService().subscribedServiceURLs.size(); - metadataReportService.subscribeURL(url); - Thread.sleep(100); - int size = getInMemoryWriableMetadataService().subscribedServiceURLs.size(); - Assertions.assertTrue(size - origSize == 1); - Assertions.assertEquals(getInMemoryWriableMetadataService().subscribedServiceURLs.get(url.getServiceKey()).first(), url); - - metadataReportService.unsubscribeURL(url); - Thread.sleep(100); - Assertions.assertTrue(getInMemoryWriableMetadataService().subscribedServiceURLs.size() == 0); - } - - @Test - public void testRefreshMetadataService() throws InterruptedException { - URL publishUrl = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestRefreshMetadataService?version=1.6.8&application=vicpubprovder&side=provider"); - URL publishUrl2 = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestRefreshMetadata2Service?version=1.6.5&application=vicpubprovder&side=provider"); - metadataReportService.exportURL(publishUrl); - metadataReportService.exportURL(publishUrl2); - String exportedRevision = "9999"; - JTestMetadataReport4Test jTestMetadataReport4Test = (JTestMetadataReport4Test) MetadataReportInstance.getMetadataReports(true); - int origSize = jTestMetadataReport4Test.store.size(); - int num = countNum(); - Assertions.assertTrue(metadataReportService.refreshMetadata(exportedRevision, "1109")); - Thread.sleep(200); - int size = jTestMetadataReport4Test.store.size(); - Assertions.assertTrue(size - origSize == num); - Assertions.assertEquals(jTestMetadataReport4Test.store.get(getServiceMetadataIdentifier(publishUrl, exportedRevision).getUniqueKey(KeyTypeEnum.UNIQUE_KEY)), publishUrl.toFullString()); - Assertions.assertEquals(jTestMetadataReport4Test.store.get(getServiceMetadataIdentifier(publishUrl2, exportedRevision).getUniqueKey(KeyTypeEnum.UNIQUE_KEY)), publishUrl2.toFullString()); - } - - - // unstable test -// @Test -// public void testRefreshMetadataSubscription() throws InterruptedException { -// URL subscriberUrl1 = URL.valueOf("subscriber://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestRefreshMetadata00Service?version=2.0.8&application=vicpubprovder&side=provider"); -// URL subscriberUrl2 = URL.valueOf("subscriber://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestRefreshMetadata09Service?version=2.0.5&application=vicpubprovder&side=provider"); -// metadataReportService.subscribeURL(subscriberUrl1); -// metadataReportService.subscribeURL(subscriberUrl2); -// String exportedRevision = "9999"; -// String subscriberRevision = "2099"; -// String applicationName = "wriableMetadataService"; -// JTestMetadataReport4Test jTestMetadataReport4Test = (JTestMetadataReport4Test) MetadataReportInstance.getMetadataReport(true); -// int origSize = jTestMetadataReport4Test.store.size(); -// ApplicationModel.setApplication(applicationName); -// Assertions.assertTrue(metadataReportService.refreshMetadata(exportedRevision, subscriberRevision)); -// Thread.sleep(200); -// int size = jTestMetadataReport4Test.store.size(); -// Assertions.assertTrue(size - origSize == 1); -// String r = jTestMetadataReport4Test.store.get(getSubscriberMetadataIdentifier( -// subscriberRevision).getUniqueKey(KeyTypeEnum.UNIQUE_KEY)); -// Assertions.assertNotNull(r); -// } - - - private ServiceMetadataIdentifier getServiceMetadataIdentifier(URL publishUrl, String exportedRevision) { - ServiceMetadataIdentifier serviceMetadataIdentifier = new ServiceMetadataIdentifier(publishUrl); - serviceMetadataIdentifier.setRevision(exportedRevision); - serviceMetadataIdentifier.setProtocol(publishUrl.getProtocol()); - return serviceMetadataIdentifier; - } - - private SubscriberMetadataIdentifier getSubscriberMetadataIdentifier(String subscriberRevision) { - SubscriberMetadataIdentifier subscriberMetadataIdentifier = new SubscriberMetadataIdentifier(); - subscriberMetadataIdentifier.setRevision(subscriberRevision); - subscriberMetadataIdentifier.setApplication(ApplicationModel.getApplication()); - return subscriberMetadataIdentifier; - } - - private InMemoryWritableMetadataService getInMemoryWriableMetadataService() { - return (InMemoryWritableMetadataService) metadataReportService.defaultWritableMetadataService; - } - - private int countNum() { - int num = 0; - for (SortedSet<URL> tmp : getInMemoryWriableMetadataService().exportedServiceURLs.values()) { - num += tmp.size(); - } - if (!getInMemoryWriableMetadataService().subscribedServiceURLs.values().isEmpty()) { - num++; - } - return num; - } -} diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/store/RemoteWritableMetadataServiceTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/store/RemoteWritableMetadataServiceTest.java deleted file mode 100644 index e9ca89f..0000000 --- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/store/RemoteWritableMetadataServiceTest.java +++ /dev/null @@ -1,188 +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.store; - -import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.utils.NetUtils; -import org.apache.dubbo.metadata.definition.model.FullServiceDefinition; -import org.apache.dubbo.metadata.report.MetadataReportInstance; -import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum; -import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier; -import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier; -import org.apache.dubbo.metadata.test.JTestMetadataReport4Test; -import org.apache.dubbo.rpc.model.ApplicationModel; - -import com.google.gson.Gson; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.util.Map; - -/** - * 2018/9/14 - */ -public class RemoteWritableMetadataServiceTest { - URL url = URL.valueOf("JTest://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic"); - RemoteWritableMetadataService metadataReportService1; - - @BeforeEach - public void before() { - metadataReportService1 = new RemoteWritableMetadataService(); - MetadataReportInstance.init(url); - } - - @Test - public void testPublishProviderNoInterfaceName() { - URL publishUrl = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vicpubprovder&side=provider"); - metadataReportService1.publishServiceDefinition(publishUrl); - - Assertions.assertTrue(metadataReportService1.getMetadataReport() instanceof JTestMetadataReport4Test); - - JTestMetadataReport4Test jTestMetadataReport4Test = (JTestMetadataReport4Test) metadataReportService1.getMetadataReport(); - Assertions.assertTrue(!jTestMetadataReport4Test.store.containsKey(JTestMetadataReport4Test.getProviderKey(publishUrl))); - - } - - @Test - public void testPublishProviderWrongInterface() { - - URL publishUrl = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vicpu&interface=ccc&side=provider"); - metadataReportService1.publishServiceDefinition(publishUrl); - - Assertions.assertTrue(metadataReportService1.getMetadataReport() instanceof JTestMetadataReport4Test); - - JTestMetadataReport4Test jTestMetadataReport4Test = (JTestMetadataReport4Test) metadataReportService1.getMetadataReport(); - Assertions.assertTrue(!jTestMetadataReport4Test.store.containsKey(JTestMetadataReport4Test.getProviderKey(publishUrl))); - - } - - @Test - public void testPublishProviderContainInterface() throws InterruptedException { - - URL publishUrl = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService?version=1.0.3&application=vicpubp&interface=org.apache.dubbo.metadata.store.InterfaceNameTestService&side=provider"); - metadataReportService1.publishServiceDefinition(publishUrl); - Thread.sleep(300); - - Assertions.assertTrue(metadataReportService1.getMetadataReport() instanceof JTestMetadataReport4Test); - - JTestMetadataReport4Test jTestMetadataReport4Test = (JTestMetadataReport4Test) metadataReportService1.getMetadataReport(); - Assertions.assertTrue(jTestMetadataReport4Test.store.containsKey(JTestMetadataReport4Test.getProviderKey(publishUrl))); - - String value = jTestMetadataReport4Test.store.get(JTestMetadataReport4Test.getProviderKey(publishUrl)); - FullServiceDefinition fullServiceDefinition = toServiceDefinition(value); - Map<String, String> map = fullServiceDefinition.getParameters(); - Assertions.assertEquals(map.get("application"), "vicpubp"); - Assertions.assertEquals(map.get("version"), "1.0.3"); - Assertions.assertEquals(map.get("interface"), "org.apache.dubbo.metadata.store.InterfaceNameTestService"); - } - - @Test - public void testPublishConsumer() throws InterruptedException { - - URL publishUrl = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService?version=1.0.x&application=vicpubconsumer&side=consumer"); - metadataReportService1.publishServiceDefinition(publishUrl); - Thread.sleep(300); - - Assertions.assertTrue(metadataReportService1.getMetadataReport() instanceof JTestMetadataReport4Test); - - JTestMetadataReport4Test jTestMetadataReport4Test = (JTestMetadataReport4Test) metadataReportService1.getMetadataReport(); - Assertions.assertTrue(jTestMetadataReport4Test.store.containsKey(JTestMetadataReport4Test.getConsumerKey(publishUrl))); - - String value = jTestMetadataReport4Test.store.get(JTestMetadataReport4Test.getConsumerKey(publishUrl)); - Gson gson = new Gson(); - Map<String, String> map = gson.fromJson(value, Map.class); - Assertions.assertEquals(map.get("application"), "vicpubconsumer"); - Assertions.assertEquals(map.get("version"), "1.0.x"); - - } - - @Test - public void testPublishServiceDefinition() { - URL publishUrl = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vicpubprovder&side=provider"); - metadataReportService1.publishServiceDefinition(publishUrl); - - Assertions.assertTrue(metadataReportService1.getMetadataReport() instanceof JTestMetadataReport4Test); - - JTestMetadataReport4Test jTestMetadataReport4Test = (JTestMetadataReport4Test) metadataReportService1.getMetadataReport(); - Assertions.assertTrue(!jTestMetadataReport4Test.store.containsKey(JTestMetadataReport4Test.getProviderKey(publishUrl))); - - } - - @Test - public void testUnexportURL() { - - } - - @Test - public void testRefreshMetadataService() throws InterruptedException { - URL publishUrl = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestRefreshMetadataService?version=1.0.8&application=vicpubprovder&side=provider"); - URL publishUrl2 = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestRefreshMetadata2Service?version=1.0.5&application=vicpubprovder&side=provider"); - metadataReportService1.exportURL(publishUrl); - metadataReportService1.exportURL(publishUrl2); - String exportedRevision = "9999"; - JTestMetadataReport4Test jTestMetadataReport4Test = (JTestMetadataReport4Test) metadataReportService1.getMetadataReport(); - int origSize = jTestMetadataReport4Test.store.size(); - Assertions.assertTrue(metadataReportService1.refreshMetadata(exportedRevision, "1109")); - Thread.sleep(200); - int size = jTestMetadataReport4Test.store.size(); - Assertions.assertEquals(origSize, size); - Assertions.assertNull(jTestMetadataReport4Test.store.get(getServiceMetadataIdentifier(publishUrl, exportedRevision).getUniqueKey(KeyTypeEnum.UNIQUE_KEY))); - Assertions.assertNull(jTestMetadataReport4Test.store.get(getServiceMetadataIdentifier(publishUrl2, exportedRevision).getUniqueKey(KeyTypeEnum.UNIQUE_KEY))); - } - - @Test - public void testRefreshMetadataSubscription() throws InterruptedException { - URL subscriberUrl1 = URL.valueOf("subscriber://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestRefreshMetadata00Service?version=1.0.8&application=vicpubprovder&side=provider"); - URL subscriberUrl2 = URL.valueOf("subscriber://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestRefreshMetadata09Service?version=1.0.5&application=vicpubprovder&side=provider"); - metadataReportService1.subscribeURL(subscriberUrl1); - metadataReportService1.subscribeURL(subscriberUrl2); - String exportedRevision = "9999"; - String subscriberRevision = "2099"; - String applicationName = "wriableMetadataService"; - JTestMetadataReport4Test jTestMetadataReport4Test = (JTestMetadataReport4Test) metadataReportService1.getMetadataReport(); - int origSize = jTestMetadataReport4Test.store.size(); - ApplicationModel.setApplication(applicationName); - Assertions.assertTrue(metadataReportService1.refreshMetadata(exportedRevision, subscriberRevision)); - Thread.sleep(200); - int size = jTestMetadataReport4Test.store.size(); - Assertions.assertEquals(origSize, size); - String r = jTestMetadataReport4Test.store.get(getSubscriberMetadataIdentifier( - subscriberRevision).getUniqueKey(KeyTypeEnum.UNIQUE_KEY)); - Assertions.assertNull(r); - } - - private ServiceMetadataIdentifier getServiceMetadataIdentifier(URL publishUrl, String exportedRevision) { - ServiceMetadataIdentifier serviceMetadataIdentifier = new ServiceMetadataIdentifier(publishUrl); - serviceMetadataIdentifier.setRevision(exportedRevision); - serviceMetadataIdentifier.setProtocol(publishUrl.getProtocol()); - return serviceMetadataIdentifier; - } - - private SubscriberMetadataIdentifier getSubscriberMetadataIdentifier(String subscriberRevision) { - SubscriberMetadataIdentifier subscriberMetadataIdentifier = new SubscriberMetadataIdentifier(); - subscriberMetadataIdentifier.setRevision(subscriberRevision); - subscriberMetadataIdentifier.setApplication(ApplicationModel.getApplication()); - return subscriberMetadataIdentifier; - } - - private FullServiceDefinition toServiceDefinition(String urlQuery) { - Gson gson = new Gson(); - return gson.fromJson(urlQuery, FullServiceDefinition.class); - } - -} diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java index 2607054..48ceffd 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java @@ -29,7 +29,6 @@ import org.apache.dubbo.metadata.WritableMetadataService; import org.apache.dubbo.registry.NotifyListener; import org.apache.dubbo.registry.Registry; import org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener; -import org.apache.dubbo.registry.client.metadata.MetadataUtils; import org.apache.dubbo.registry.client.metadata.SubscribedURLsSynthesizer; import org.apache.dubbo.registry.support.FailbackRegistry; @@ -132,7 +131,7 @@ public class ServiceDiscoveryRegistry extends FailbackRegistry { this.serviceDiscovery = createServiceDiscovery(registryURL); this.subscribedServices = parseServices(registryURL.getParameter(SUBSCRIBED_SERVICE_NAMES_KEY)); this.serviceNameMapping = ServiceNameMapping.getDefaultExtension(); - this.writableMetadataService = MetadataUtils.getLocalMetadataService(); + this.writableMetadataService = WritableMetadataService.getDefaultExtension(); } public ServiceDiscovery getServiceDiscovery() { diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizer.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizer.java index 5ad373a..be78440 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizer.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizer.java @@ -25,10 +25,9 @@ import org.apache.dubbo.registry.client.ServiceInstanceMetadataCustomizer; import java.util.SortedSet; import static org.apache.dubbo.metadata.MetadataService.toURLs; -import static org.apache.dubbo.metadata.WritableMetadataService.getExtension; +import static org.apache.dubbo.metadata.WritableMetadataService.getDefaultExtension; import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.METADATA_SERVICE_URL_PARAMS_PROPERTY_NAME; import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.getMetadataServiceParameter; -import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.getMetadataStorageType; /** * An {@link ServiceInstanceMetadataCustomizer} to customize the {@link URL urls} of {@link MetadataService} @@ -46,10 +45,7 @@ public class MetadataServiceURLParamsMetadataCustomizer extends ServiceInstanceM @Override public String resolveMetadataPropertyValue(ServiceInstance serviceInstance) { - - String metadataStorageType = getMetadataStorageType(serviceInstance); - - WritableMetadataService writableMetadataService = getExtension(metadataStorageType); + WritableMetadataService writableMetadataService = getDefaultExtension(); String serviceInterface = MetadataService.class.getName(); diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java index 0926f7d..9cbe577 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java @@ -23,7 +23,6 @@ import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.metadata.MetadataService; import org.apache.dubbo.metadata.WritableMetadataService; import org.apache.dubbo.registry.client.ServiceInstance; -import org.apache.dubbo.registry.client.metadata.store.InMemoryWritableMetadataService; import org.apache.dubbo.registry.client.metadata.store.RemoteMetadataServiceImpl; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.Protocol; @@ -55,27 +54,16 @@ public class MetadataUtils { if (remoteMetadataService == null) { synchronized (REMOTE_LOCK) { if (remoteMetadataService == null) { - remoteMetadataService = new RemoteMetadataServiceImpl(getLocalMetadataService()); + remoteMetadataService = new RemoteMetadataServiceImpl(WritableMetadataService.getDefaultExtension()); } } } return remoteMetadataService; } - public static WritableMetadataService getLocalMetadataService() { - if (localMetadataService == null) { - synchronized (LOCK) { - if (localMetadataService == null) { - localMetadataService = new InMemoryWritableMetadataService(); - } - } - } - return localMetadataService; - } - public static void publishServiceDefinition(URL url) { // store in local - getLocalMetadataService().publishServiceDefinition(url); + WritableMetadataService.getDefaultExtension().publishServiceDefinition(url); // send to remote getRemoteMetadataService().publishServiceDefinition(url); } diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ProtocolPortsMetadataCustomizer.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ProtocolPortsMetadataCustomizer.java index 2d83295..c8dffc4 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ProtocolPortsMetadataCustomizer.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ProtocolPortsMetadataCustomizer.java @@ -26,8 +26,6 @@ import org.apache.dubbo.rpc.Protocol; import java.util.HashMap; import java.util.Map; -import static org.apache.dubbo.metadata.WritableMetadataService.getExtension; -import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.getMetadataStorageType; import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.setEndpoints; /** @@ -40,10 +38,7 @@ public class ProtocolPortsMetadataCustomizer implements ServiceInstanceCustomize @Override public void customize(ServiceInstance serviceInstance) { - - String metadataStoredType = getMetadataStorageType(serviceInstance); - - WritableMetadataService writableMetadataService = getExtension(metadataStoredType); + WritableMetadataService writableMetadataService = WritableMetadataService.getDefaultExtension(); Map<String, Integer> protocols = new HashMap<>(); writableMetadataService.getExportedURLs() diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java index ac0cbc2..799d2aa 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java @@ -44,6 +44,7 @@ import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE; import static org.apache.dubbo.common.constants.CommonConstants.SIDE_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.EXPORTED_SERVICES_REVISION_PROPERTY_NAME; public class RemoteMetadataServiceImpl { @@ -59,14 +60,17 @@ public class RemoteMetadataServiceImpl { } public void publishMetadata(ServiceInstance instance) { - SubscriberMetadataIdentifier identifier = new SubscriberMetadataIdentifier(instance.getServiceName(), ServiceInstanceMetadataUtils.getExportedServicesRevision(instance)); + MetadataInfo metadataInfo = localMetadataService.getMetadataInfo(); + SubscriberMetadataIdentifier identifier = new SubscriberMetadataIdentifier(instance.getServiceName(), metadataInfo.getRevision()); getMetadataReports().forEach(metadataReport -> { - metadataReport.publishAppMetadata(identifier, localMetadataService.getMetadataInfo()); + instance.getMetadata().put(EXPORTED_SERVICES_REVISION_PROPERTY_NAME, metadataInfo.getRevision()); + metadataReport.publishAppMetadata(identifier, metadataInfo); }); } public MetadataInfo getMetadata(ServiceInstance instance) { - SubscriberMetadataIdentifier identifier = new SubscriberMetadataIdentifier(instance.getServiceName(), ServiceInstanceMetadataUtils.getExportedServicesRevision(instance)); + SubscriberMetadataIdentifier identifier = new SubscriberMetadataIdentifier(instance.getServiceName(), + ServiceInstanceMetadataUtils.getExportedServicesRevision(instance)); for (MetadataReport reporter : getMetadataReports()) { MetadataInfo metadataInfo = reporter.getAppMetadata(identifier, instance.getMetadata()); if (metadataInfo != null) { diff --git a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.WritableMetadataService b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.WritableMetadataService new file mode 100644 index 0000000..0030270 --- /dev/null +++ b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.WritableMetadataService @@ -0,0 +1 @@ +default=org.apache.dubbo.registry.client.metadata.store.InMemoryWritableMetadataService \ No newline at end of file diff --git a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.metadata.proxy.MetadataServiceProxyFactory b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.metadata.proxy.MetadataServiceProxyFactory deleted file mode 100644 index a42e022..0000000 --- a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.metadata.proxy.MetadataServiceProxyFactory +++ /dev/null @@ -1,3 +0,0 @@ -local=org.apache.dubbo.registry.client.metadata.proxy.DefaultMetadataServiceProxyFactory -remote=org.apache.dubbo.registry.client.metadata.proxy.RemoteMetadataServiceProxyFactory -composite = org.apache.dubbo.registry.client.metadata.proxy.CompositeMetadataServiceProxyFactory \ No newline at end of file diff --git a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosServiceDiscovery.java b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosServiceDiscovery.java index f27a50d..b84bfa9 100644 --- a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosServiceDiscovery.java +++ b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosServiceDiscovery.java @@ -30,7 +30,6 @@ import com.alibaba.nacos.api.naming.listener.NamingEvent; import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.api.naming.pojo.ListView; -import java.util.Collection; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -121,7 +120,7 @@ public class NacosServiceDiscovery implements ServiceDiscovery { private void handleEvent(NamingEvent event, ServiceInstancesChangedListener listener) { String serviceName = event.getServiceName(); - Collection<ServiceInstance> serviceInstances = event.getInstances() + List<ServiceInstance> serviceInstances = event.getInstances() .stream() .map(NacosNamingServiceUtils::toServiceInstance) .collect(Collectors.toList());
