You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2020/07/23 02:46:10 UTC
[dubbo] 03/03: Merge branch 'master' into 3.0
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 0d785f1346f48abf34a1a7690b437c3615780beb
Merge: 7bef551 7702fcf
Author: ken.lj <ke...@gmail.com>
AuthorDate: Wed Jul 22 14:45:08 2020 +0800
Merge branch 'master' into 3.0
# Conflicts:
# dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
# dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
# dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
# dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/listener/ServiceNameMappingListener.java
# dubbo-dependencies-bom/pom.xml
# dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml
# dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java
# dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataConstants.java
# dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/ServiceNameMapping.java
# dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/URLRevisionResolver.java
# dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/WritableMetadataService.java
# dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/MetadataReport.java
# dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/store/RemoteWritableMetadataService.java
# dubbo-metadata/dubbo-metadata-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.ServiceNameMapping
# dubbo-metadata/dubbo-metadata-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.WritableMetadataService
# dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMappingTest.java
# dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/InMemoryWritableMetadataServiceTest.java
# dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/URLRevisionResolverTest.java
# dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/store/InMemoryWritableMetadataServiceTest.java
# dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/store/RemoteWritableMetadataServiceTest.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/CustomizableServiceInstanceListener.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ExportedServicesRevisionMetadataCustomizer.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/SubscribedServicesRevisionMetadataCustomizer.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/proxy/BaseMetadataServiceProxyFactory.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/proxy/MetadataServiceProxyFactory.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/proxy/RemoteMetadataServiceProxy.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryInvokerWrapper.java
# dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventListener
# dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.metadata.proxy.MetadataServiceProxyFactory
# pom.xml
.gitignore | 3 +
README.md | 8 +-
dubbo-all/pom.xml | 8 +
.../java/org/apache/dubbo/rpc/cluster/Cluster.java | 15 +-
.../cluster/{Cluster.java => ClusterInvoker.java} | 84 +-
.../org/apache/dubbo/rpc/cluster/Configurator.java | 5 +-
.../cluster/configurator/parser/ConfigParser.java | 26 +
.../router/condition/config/ListenableRouter.java | 2 +-
.../cluster/router/mock/MockInvokersSelector.java | 2 +-
.../dubbo/rpc/cluster/router/tag/TagRouter.java | 12 +
.../cluster/support/AbstractClusterInvoker.java | 3 +-
.../support/registry/ZoneAwareClusterInvoker.java | 32 +-
.../support/wrapper/MockClusterInvoker.java | 8 +-
.../configurator/parser/ConfigParserTest.java | 16 +
.../support/AbstractClusterInvokerTest.java | 2 +-
.../src/main/java/org/apache/dubbo/common/URL.java | 60 +-
.../configcenter/AbstractDynamicConfiguration.java | 103 +-
.../AbstractDynamicConfigurationFactory.java | 2 +-
.../config/configcenter/DynamicConfiguration.java | 10 +
.../configcenter/TreePathDynamicConfiguration.java | 186 ++
.../file/FileSystemDynamicConfiguration.java | 150 +-
.../dubbo/common/constants/CommonConstants.java | 41 +-
.../dubbo/common/constants/RegistryConstants.java | 2 +
.../org/apache/dubbo/common/convert/Converter.java | 17 +
.../convert/multiple/MultiValueConverter.java | 28 +
.../dubbo/common/extension/ExtensionLoader.java | 2069 ++++++++++----------
.../org/apache/dubbo/common/extension/Wrapper.java | 17 +-
.../extension/support/ActivateComparator.java | 4 +-
...ivateComparator.java => WrapperComparator.java} | 232 +--
.../org/apache/dubbo/common/utils/ArrayUtils.java | 22 +
.../org/apache/dubbo/common/utils/PathUtils.java | 7 +-
.../org/apache/dubbo/common/utils/PojoUtils.java | 56 +-
.../utils/StringConstantFieldValuePredicate.java | 67 +
.../org/apache/dubbo/common/utils/StringUtils.java | 57 +-
.../apache/dubbo/config/MetadataReportConfig.java | 4 +-
.../java/org/apache/dubbo/config/MethodConfig.java | 7 +-
.../apache/dubbo/config/ReferenceConfigBase.java | 7 +-
.../org/apache/dubbo/config/RegistryConfig.java | 37 +-
.../org/apache/dubbo/config/ServiceConfigBase.java | 25 +-
.../dubbo/config/annotation/DubboReference.java | 9 +
.../apache/dubbo/config/context/ConfigManager.java | 13 +-
.../java/org/apache/dubbo/event/EventListener.java | 2 +-
.../org/apache/dubbo/rpc/model/ConsumerModel.java | 7 +-
.../test/java/org/apache/dubbo/common/URLTest.java | 1777 ++++++++---------
.../AbstractDynamicConfigurationTest.java | 60 +-
.../file/FileSystemDynamicConfigurationTest.java | 45 +-
.../common/constants/CommonConstantsTest.java | 41 +
.../convert/ConverterTest.java} | 39 +-
.../convert/StringToBooleanConverterTest.java | 5 +-
.../convert/StringToCharArrayConverterTest.java | 5 +-
.../convert/StringToCharacterConverterTest.java | 5 +-
.../convert/StringToDoubleConverterTest.java | 5 +-
.../convert/StringToFloatConverterTest.java | 5 +-
.../convert/StringToIntegerConverterTest.java | 5 +-
.../convert/StringToLongConverterTest.java | 5 +-
.../convert/StringToOptionalConverterTest.java | 5 +-
.../convert/StringToShortConverterTest.java | 5 +-
.../convert/StringToStringConverterTest.java | 5 +-
.../convert/multiple/MultiValueConverterTest.java | 72 +
.../multiple/StringToArrayConverterTest.java | 4 +-
.../StringToBlockingDequeConverterTest.java | 4 +-
.../StringToBlockingQueueConverterTest.java | 4 +-
.../multiple/StringToCollectionConverterTest.java | 5 +-
.../multiple/StringToDequeConverterTest.java | 4 +-
.../multiple/StringToListConverterTest.java | 4 +-
.../StringToNavigableSetConverterTest.java | 6 +-
.../multiple/StringToQueueConverterTest.java | 3 +-
.../convert/multiple/StringToSetConverterTest.java | 3 +-
.../multiple/StringToSortedSetConverterTest.java | 6 +-
.../StringToTransferQueueConverterTest.java | 6 +-
.../apache/dubbo/common/utils/PojoUtilsTest.java | 36 +
.../StringConstantFieldValuePredicateTest.java} | 44 +-
.../apache/dubbo/common/utils/StringUtilsTest.java | 73 +-
.../dubbo/config/context/ConfigManagerTest.java | 7 +-
.../org/apache/dubbo/event/EchoEventListener2.java | 2 +-
.../dubbo/common/extension/ExtensionFactory.java | 3 +
.../java/org/apache/dubbo/config/ConfigTest.java | 4 +-
.../apache/dubbo/config/ReferenceConfigTest.java | 4 +-
dubbo-config/dubbo-config-api/pom.xml | 31 +
.../org/apache/dubbo/config/ReferenceConfig.java | 83 +-
.../org/apache/dubbo/config/ServiceConfig.java | 2 +-
.../dubbo/config/bootstrap/DubboBootstrap.java | 224 ++-
.../bootstrap/builders/ReferenceBuilder.java | 22 +
.../config/bootstrap/builders/RegistryBuilder.java | 12 +-
.../config/bootstrap/builders/ServiceBuilder.java | 18 +-
.../metadata/AbstractMetadataServiceExporter.java | 150 ++
.../ConfigurableMetadataServiceExporter.java | 69 +-
.../metadata/RemoteMetadataServiceExporter.java | 79 +
.../dubbo/config/utils/ConfigValidationUtils.java | 14 +-
...g.apache.dubbo.metadata.MetadataServiceExporter | 3 +
.../apache/dubbo/config/ReferenceConfigTest.java | 5 +-
.../org/apache/dubbo/config/ServiceConfigTest.java | 30 +-
...va => ConsulDubboServiceConsumerBootstrap.java} | 10 +-
...va => ConsulDubboServiceProviderBootstrap.java} | 10 +-
.../NacosDubboServiceConsumerBootstrap.java | 21 +-
.../NacosDubboServiceProviderBootstrap.java | 18 +-
.../ZookeeperDubboServiceConsumerBootstrap.java | 13 +-
.../ZookeeperDubboServiceProviderBootstrap.java | 9 +-
.../bootstrap/builders/ReferenceBuilderTest.java | 15 +-
.../bootstrap/builders/RegistryBuilderTest.java | 2 +-
.../bootstrap/builders/ServiceBuilderTest.java | 32 +-
.../PublishingServiceDefinitionListenerTest.java | 94 +
.../RemoteMetadataServiceExporterTest.java | 106 +
.../config/url/ExporterSideConfigUrlTest.java | 5 +-
.../metadata/MetadataServiceExporterTest.java | 38 +-
dubbo-config/dubbo-config-spring/pom.xml | 21 +
.../apache/dubbo/config/spring/ServiceBean.java | 6 +-
.../ReferenceAnnotationBeanPostProcessor.java | 92 +-
.../annotation/ServiceClassPostProcessor.java | 4 +-
.../spring/context/annotation/EnableDubbo.java | 2 +-
.../context/annotation/EnableDubboConfig.java | 2 +-
.../spring/extension/SpringExtensionFactory.java | 2 +-
.../schema/AnnotationBeanDefinitionParser.java | 10 +-
.../spring/schema/DubboBeanDefinitionParser.java | 45 +-
.../spring/schema/DubboNamespaceHandler.java | 25 +-
.../src/main/resources/META-INF/dubbo.xsd | 17 +-
.../ReferenceAnnotationBeanPostProcessorTest.java | 13 +
.../annotation/ReferenceBeanBuilderTest.java | 29 +-
.../ServiceAnnotationBeanPostProcessorTest.java | 13 +
.../annotation/ServiceClassPostProcessorTest.java | 13 +
.../MultipleServicesWithMethodConfigsTest.java} | 30 +-
.../DubboComponentScanRegistrarTest.java | 4 +-
.../spring/context/annotation/EnableDubboTest.java | 4 +-
.../consumer/test/TestConsumerConfiguration.java | 5 +-
.../properties/DefaultDubboConfigBinderTest.java | 13 +
.../dubbo/config/spring/issues/Issue6252Test.java | 50 +
.../ZookeeperDubboSpringConsumerBootstrap.java | 53 +
.../ZookeeperDubboSpringConsumerXmlBootstrap.java | 32 +-
.../ZookeeperDubboSpringProviderBootstrap.java | 60 +
.../spring/schema/DubboNamespaceHandlerTest.java | 4 +-
.../config/spring/schema/GenericServiceTest.java | 13 +
.../src/test/resources/META-INF/config.properties | 2 +
.../resources/META-INF/issue-6252-test.properties | 15 +
.../zookeeper-dubbb-consumer.properties | 14 +
.../zookeeper-dubbb-provider.properties | 10 +
.../zookeeper-dubbo-consumer.xml | 34 +
.../spring/multiple-services-with-methods.xml | 45 +
.../consul/ConsulDynamicConfiguration.java | 123 +-
.../consul/ConsulDynamicConfigurationTest.java | 20 +-
.../support/nacos/NacosDynamicConfiguration.java | 64 +-
.../zookeeper/ZookeeperDynamicConfiguration.java | 68 +-
.../ZookeeperDynamicConfigurationTest.java | 4 +-
.../demo/consumer/comp/DemoServiceComponent.java | 4 +-
.../dubbo/demo/provider/DemoServiceImpl.java | 4 +-
.../validation/support/jvalidation/JValidator.java | 6 +-
.../metadata/CompositeServiceNameMapping.java | 96 +
.../org/apache/dubbo/metadata/MetadataService.java | 7 +-
.../dubbo/metadata/MetadataServiceExporter.java | 41 +-
.../apache/dubbo/metadata/MetadataServiceType.java | 72 +
.../metadata/ParameterizedServiceNameMapping.java} | 31 +-
.../metadata/PropertiesFileServiceNameMapping.java | 148 ++
.../metadata/ReadOnlyServiceNameMapping.java} | 31 +-
.../metadata/definition/TypeDefinitionBuilder.java | 10 +-
.../metadata/definition/builder/TypeBuilder.java | 3 +-
.../BaseApplicationMetadataIdentifier.java | 9 +-
.../identifier/BaseServiceMetadataIdentifier.java | 2 +-
.../metadata/report/identifier/KeyTypeEnum.java | 40 +-
.../report/support/AbstractMetadataReport.java | 133 +-
.../support/ConfigCenterBasedMetadataReport.java | 162 ++
.../ConfigCenterBasedMetadataReportFactory.java | 90 +
.../file/FileSystemMetadataReportFactory.java} | 21 +-
.../AbstractAbstractWritableMetadataService.java | 100 +
...che.dubbo.metadata.report.MetadataReportFactory | 1 +
.../metadata/CompositeServiceNameMappingTest.java | 107 +
.../dubbo/metadata/MetadataConstantsTest.java} | 19 +-
.../dubbo/metadata/MetadataServiceTypeTest.java | 40 +-
.../ParameterizedServiceNameMappingTest.java | 67 +
.../PropertiesFileServiceNameMappingTest.java | 60 +
.../dubbo/metadata/ServiceNameMappingTest.java | 121 ++
.../metadata/definition/Test3TypeBuilder.java} | 30 +-
.../metadata/definition/TestTypeBuilder.java} | 30 +-
.../definition/TypeDefinitionBuilderTest.java | 21 +-
.../report/identifier/KeyTypeEnumTest.java} | 20 +-
.../support/AbstractMetadataReportFactoryTest.java | 9 +-
.../report/support/AbstractMetadataReportTest.java | 121 +-
.../ConfigCenterBasedMetadataReportTest.java | 155 ++
...e.dubbo.metadata.definition.builder.TypeBuilder | 2 +
.../META-INF/dubbo/service-name-mapping.properties | 3 +
.../dubbo-metadata-report-consul/pom.xml | 8 +-
.../store/consul/ConsulMetadataReport.java | 4 +
.../store/consul/ConsulMetadataReportFactory.java | 13 +-
dubbo-metadata/dubbo-metadata-report-nacos/pom.xml | 9 +-
.../metadata/store/nacos/NacosMetadataReport.java | 131 +-
.../store/nacos/NacosMetadataReportFactory.java | 13 +-
.../store/nacos/NacosMetadataReportTest.java | 247 ---
.../dubbo-metadata-report-zookeeper/pom.xml | 2 +-
.../store/zookeeper/ZookeeperMetadataReport.java | 29 +
.../zookeeper/ZookeeperMetadataReportFactory.java | 22 +-
.../zookeeper/ZookeeperMetadataReportTest.java | 553 +++---
.../dubbo/qos/legacy/InvokerTelnetHandlerTest.java | 14 +
.../dubbo/qos/legacy/service/DemoService.java | 2 +
.../dubbo/qos/legacy/service/DemoServiceImpl.java | 5 +
.../dubbo/registry/client/ServiceInstance.java | 22 +
.../metadata/ServiceInstanceMetadataUtils.java | 4 +-
.../StandardMetadataServiceURLBuilder.java | 1 +
.../CompositeMetadataServiceProxyFactory.java | 133 ++
.../registry/integration/RegistryDirectory.java | 4 +-
.../integration/RegistryInvokerWrapper.java | 18 +-
.../registry/integration/RegistryProtocol.java | 22 +-
...dubbo.registry.client.ServiceInstanceCustomizer | 3 +-
.../client/DefaultServiceInstanceTest.java | 9 +
.../proxy/BaseMetadataServiceProxyFactoryTest.java | 78 +
.../CompositeMetadataServiceProxyFactoryTest.java | 96 +
.../proxy/MetadataServiceProxyFactoryTest.java | 49 +
.../proxy/MyMetadataServiceProxyFactory.java | 18 +-
...ient.metadata.proxy.MetadataServiceProxyFactory | 2 +
.../dubbo/registry/consul/ConsulParameter.java | 87 +
.../dubbo/registry/consul/ConsulRegistry.java | 32 +-
.../registry/consul/ConsulServiceDiscovery.java | 89 +-
.../consul/ConsulServiceDiscoveryTest.java | 16 +-
.../registry/dubbo/RegistryDirectoryTest.java | 2 +-
.../dubbo/registry/dubbo/RegistryProtocolTest.java | 5 +-
.../registry/eureka/EurekaServiceDiscovery.java | 5 +-
.../nacos/util/NacosNamingServiceUtils.java | 48 +-
.../remoting/http/tomcat/TomcatHttpServer.java | 10 +-
.../remoting/transport/netty4/NettyServer.java | 6 +-
.../org/apache/dubbo/rpc/AttachmentsAdapter.java | 48 +-
.../main/java/org/apache/dubbo/rpc/Constants.java | 1 +
.../org/apache/dubbo/rpc/filter/ContextFilter.java | 4 +-
.../apache/dubbo/rpc/filter/GenericImplFilter.java | 3 +-
.../dubbo/rpc/protocol/ProtocolFilterWrapper.java | 2 +
.../rpc/protocol/ProtocolListenerWrapper.java | 2 +
.../org/apache/dubbo/rpc/support/MockInvoker.java | 24 +-
.../org/apache/dubbo/rpc/support/RpcUtils.java | 16 +-
.../dubbo/internal/org.apache.dubbo.rpc.Filter | 3 +-
.../java/org/apache/dubbo/rpc/RpcContextTest.java | 3 +-
.../rpc/protocol/dubbo/CallbackServiceCodec.java | 3 +
.../protocol/dubbo/DecodeableRpcInvocation.java | 2 +-
.../dubbo/rpc/protocol/dubbo/DubboInvoker.java | 6 +-
.../rpc/protocol/dubbo/ArgumentCallbackTest.java | 22 +
.../protocol/webservice/WebServiceProtocol.java | 9 +-
.../dubbo/internal/org.apache.dubbo.rpc.Protocol | 2 +-
.../webservice/WebserviceProtocolTest.java | 90 +
.../serialize/hessian2/Hessian2ObjectInput.java | 3 +-
.../serialize/hessian2/Hessian2ObjectOutput.java | 3 +-
.../hessian2/Hessian2SerializerFactory.java | 6 +-
.../AbstractHessian2FactoryInitializer.java} | 21 +-
.../DefaultHessian2FactoryInitializer.java} | 17 +-
.../hessian2/dubbo/Hessian2FactoryInitializer.java | 43 +
.../dubbo/WhitelistHessian2FactoryInitializer.java | 50 +
...alize.hessian2.dubbo.Hessian2FactoryInitializer | 2 +
241 files changed, 7864 insertions(+), 3997 deletions(-)
diff --cc dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
index 211d6f8,6ab3a89..ac56025
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
@@@ -602,7 -623,42 +624,43 @@@ class URL implements Serializable
return Arrays.asList(strArray);
}
+ /**
+ * Get parameter
+ *
+ * @param key the key of parameter
+ * @param valueType the type of parameter value
+ * @param <T> the type of parameter value
+ * @return get the parameter if present, or <code>null</code>
+ * @since 2.7.8
+ */
+ public <T> T getParameter(String key, Class<T> valueType) {
+ return getParameter(key, valueType, null);
+ }
+
+ /**
+ * Get parameter
+ *
+ * @param key the key of parameter
+ * @param valueType the type of parameter value
+ * @param defaultValue the default value if parameter is absent
+ * @param <T> the type of parameter value
+ * @return get the parameter if present, or <code>defaultValue</code> will be used.
+ * @since 2.7.8
+ */
+ public <T> T getParameter(String key, Class<T> valueType, T defaultValue) {
+ String value = getParameter(key);
+ T result = null;
+ if (!isBlank(value)) {
+ result = convertIfPossible(value, valueType);
+ }
+ if (result == null) {
+ result = defaultValue;
+ }
+ return result;
+ }
+
- private Map<String, Number> getNumbers() {
++
+ protected Map<String, Number> getNumbers() {
// concurrent initialization is tolerant
if (numbers == null) {
numbers = new ConcurrentHashMap<>();
diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index df3be4b,da90597..f38b80b
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@@ -61,7 -64,9 +64,8 @@@ import java.util.Set
import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE;
import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SEPARATOR;
+ import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SEPARATOR_CHAR;
import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.LOCALHOST_VALUE;
import static org.apache.dubbo.common.constants.CommonConstants.METADATA_KEY;
@@@ -335,6 -388,24 +387,18 @@@ public class ReferenceConfig<T> extend
}
}
+ if (logger.isInfoEnabled()) {
+ logger.info("Refer dubbo service " + interfaceClass.getName() + " from url " + invoker.getUrl());
+ }
- /**
- * @since 2.7.0
- * ServiceData Store
- */
- String metadata = map.get(METADATA_KEY);
- WritableMetadataService metadataService = WritableMetadataService.getExtension(metadata == null ? DEFAULT_METADATA_STORAGE_TYPE : metadata);
- if (metadataService != null) {
- URL consumerURL = new URL(CONSUMER_PROTOCOL, map.remove(REGISTER_IP_KEY), 0, map.get(INTERFACE_KEY), map);
- metadataService.publishServiceDefinition(consumerURL);
- }
++
++ URL consumerURL = new URL(CONSUMER_PROTOCOL, map.remove(REGISTER_IP_KEY), 0, map.get(INTERFACE_KEY), map);
++ MetadataUtils.publishServiceDefinition(consumerURL);
++
+ // create service proxy
+ return (T) PROXY_FACTORY.getProxy(invoker, ProtocolUtils.isGeneric(generic));
+ }
+
+ private void checkInvokerAvailable() throws IllegalStateException {
if (shouldCheck() && !invoker.isAvailable()) {
invoker.destroy();
throw new IllegalStateException("Failed to check the status of the service "
diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
index a9f2bcf,1ef096b..3806b73
--- 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
@@@ -17,9 -17,9 +17,10 @@@
package org.apache.dubbo.config.bootstrap;
import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.config.ConfigurationUtils;
import org.apache.dubbo.common.config.Environment;
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
+ import org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory;
import org.apache.dubbo.common.config.configcenter.wrapper.CompositeDynamicConfiguration;
import org.apache.dubbo.common.extension.ExtensionLoader;
import org.apache.dubbo.common.lang.ShutdownHookCallback;
@@@ -62,14 -62,13 +63,15 @@@ import org.apache.dubbo.event.GenericEv
import org.apache.dubbo.metadata.MetadataService;
import org.apache.dubbo.metadata.MetadataServiceExporter;
import org.apache.dubbo.metadata.WritableMetadataService;
+ import org.apache.dubbo.metadata.report.MetadataReportFactory;
import org.apache.dubbo.metadata.report.MetadataReportInstance;
import org.apache.dubbo.registry.client.DefaultServiceInstance;
-import org.apache.dubbo.registry.client.ServiceDiscovery;
-import org.apache.dubbo.registry.client.ServiceDiscoveryRegistry;
import org.apache.dubbo.registry.client.ServiceInstance;
import org.apache.dubbo.registry.client.ServiceInstanceCustomizer;
+import org.apache.dubbo.registry.client.metadata.MetadataUtils;
+import org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils;
+import org.apache.dubbo.registry.client.metadata.store.InMemoryWritableMetadataService;
+import org.apache.dubbo.registry.client.metadata.store.RemoteMetadataServiceImpl;
import org.apache.dubbo.registry.support.AbstractRegistryFactory;
import org.apache.dubbo.rpc.model.ApplicationModel;
@@@ -95,15 -97,13 +101,18 @@@ import static java.util.concurrent.Exec
import static org.apache.dubbo.common.config.ConfigurationUtils.parseProperties;
import static org.apache.dubbo.common.config.configcenter.DynamicConfiguration.getDynamicConfiguration;
import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
+ import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_SPLIT_PATTERN;
import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
+ import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;
import static org.apache.dubbo.common.function.ThrowableAction.execute;
+ import static org.apache.dubbo.common.utils.StringUtils.isEmpty;
import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;
+import static org.apache.dubbo.metadata.MetadataConstants.DEFAULT_METADATA_PUBLISH_DELAY;
+import static org.apache.dubbo.metadata.MetadataConstants.METADATA_PUBLISH_DELAY_KEY;
+import static org.apache.dubbo.metadata.WritableMetadataService.getDefaultExtension;
+import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.calInstanceRevision;
import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.setMetadataStorageType;
+import static org.apache.dubbo.registry.support.AbstractRegistryFactory.getServiceDiscoveries;
import static org.apache.dubbo.remoting.Constants.CLIENT_KEY;
/**
@@@ -522,8 -524,13 +533,11 @@@ public class DubboBootstrap extends Gen
checkGlobalConfigs();
+ // @since 2.7.8
+ startMetadataCenter();
+
initMetadataService();
- initMetadataServiceExports();
-
initEventListener();
if (logger.isInfoEnabled()) {
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceInstance.java
index 7b1890d,896af9c..d019a99
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceInstance.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceInstance.java
@@@ -84,11 -82,29 +84,33 @@@ public interface ServiceInstance extend
*/
Map<String, String> getMetadata();
+ Map<String, String> getExtendParams();
+
+ Map<String, String> getAllParams();
+
/**
+ * Get the value of metadata by the specified name
+ *
+ * @param name the specified name
+ * @return the value of metadata if found, or <code>null</code>
+ * @since 2.7.8
+ */
+ default String getMetadata(String name) {
+ return getMetadata(name, null);
+ }
+
+ /**
+ * Get the value of metadata by the specified name
+ *
+ * @param name the specified name
+ * @return the value of metadata if found, or <code>defaultValue</code>
+ * @since 2.7.8
+ */
+ default String getMetadata(String name, String defaultValue) {
+ return getMetadata().getOrDefault(name, defaultValue);
+ }
+
+ /**
* @return the hash code of current instance.
*/
int hashCode();
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryInvokerWrapper.java
index c6ce46f,b7e03c4..9e37c3e
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryInvokerWrapper.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryInvokerWrapper.java
@@@ -22,14 -22,14 +22,14 @@@ import org.apache.dubbo.rpc.Invoker
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.cluster.Cluster;
+ import org.apache.dubbo.rpc.cluster.ClusterInvoker;
- class RegistryInvokerWrapper<T> implements Invoker<T> {
+ class RegistryInvokerWrapper<T> implements ClusterInvoker<T> {
- private RegistryDirectory<T> directory;
+ private DynamicDirectory<T> directory;
private Cluster cluster;
private Invoker<T> invoker;
- private URL url;
- public RegistryInvokerWrapper(DynamicDirectory<T> directory, Cluster cluster, Invoker<T> invoker, URL url) {
- public RegistryInvokerWrapper(RegistryDirectory<T> directory, Cluster cluster, Invoker<T> invoker) {
++ public RegistryInvokerWrapper(DynamicDirectory<T> directory, Cluster cluster, Invoker<T> invoker) {
this.directory = directory;
this.cluster = cluster;
this.invoker = invoker;
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
index 281b0aa,9a4acc8..976d0da
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
@@@ -449,19 -446,16 +446,17 @@@ public class RegistryProtocol implement
String group = qs.get(GROUP_KEY);
if (group != null && group.length() > 0) {
if ((COMMA_SPLIT_PATTERN.split(group)).length > 1 || "*".equals(group)) {
- return doRefer(getMergeableCluster(), registry, type, url);
+ return doRefer(Cluster.getCluster(MergeableCluster.NAME), registry, type, url);
}
}
- return doRefer(cluster, registry, type, url);
- }
- private Cluster getMergeableCluster() {
- return ExtensionLoader.getExtensionLoader(Cluster.class).getExtension("mergeable");
+ Cluster cluster = Cluster.getCluster(qs.get(CLUSTER_KEY));
+ return doRefer(cluster, registry, type, url);
}
- private <T> Invoker<T> doRefer(Cluster cluster, Registry registry, Class<T> type, URL url) {
- RegistryDirectory<T> directory = new RegistryDirectory<T>(type, url);
+ protected <T> Invoker<T> doRefer(Cluster cluster, Registry registry, Class<T> type, URL url) {
+ // FIXME, SPI extension, support prototype instance
+ DynamicDirectory<T> directory = createDirectory(type, url);
directory.setRegistry(registry);
directory.setProtocol(protocol);
// all attributes of REFER_KEY
diff --cc dubbo-registry/dubbo-registry-consul/src/main/java/org/apache/dubbo/registry/consul/ConsulServiceDiscovery.java
index a43edea,b05f1d8..0c330aa
--- a/dubbo-registry/dubbo-registry-consul/src/main/java/org/apache/dubbo/registry/consul/ConsulServiceDiscovery.java
+++ b/dubbo-registry/dubbo-registry-consul/src/main/java/org/apache/dubbo/registry/consul/ConsulServiceDiscovery.java
@@@ -97,13 -126,41 +126,46 @@@ public class ConsulServiceDiscovery imp
ttlScheduler = new TtlScheduler(checkPassInterval, client);
this.tag = registryURL.getParameter(QUERY_TAG);
this.registeringTags.addAll(getRegisteringTags(url));
+ this.aclToken = ACL_TOKEN.getValue(registryURL);
+ this.tags = getTags(registryURL);
+ this.consistencyMode = getConsistencyMode(registryURL);
+ this.defaultZoneMetadataName = DEFAULT_ZONE_METADATA_NAME.getValue(registryURL);
+ this.instanceZone = INSTANCE_ZONE.getValue(registryURL);
+ this.instanceGroup = INSTANCE_GROUP.getValue(registryURL);
+ }
+
+ /**
+ * Get the {@link ConsistencyMode}
+ *
+ * @param registryURL the {@link URL} of registry
+ * @return non-null, {@link ConsistencyMode#DEFAULT} as default
+ * @sine 2.7.8
+ */
+ private ConsistencyMode getConsistencyMode(URL registryURL) {
+ String value = CONSISTENCY_MODE.getValue(registryURL);
+ if (StringUtils.isNotEmpty(value)) {
+ return ConsistencyMode.valueOf(value);
+ }
+ return ConsistencyMode.DEFAULT;
+ }
+
+ /**
+ * Get the "tags" from the {@link URL} of registry
+ *
+ * @param registryURL the {@link URL} of registry
+ * @return non-null
+ * @sine 2.7.8
+ */
+ private List<String> getTags(URL registryURL) {
+ String value = TAGS.getValue(registryURL);
+ return StringUtils.splitToList(value, COMMA_SEPARATOR_CHAR);
}
+ @Override
+ public URL getUrl() {
+ return url;
+ }
+
private List<String> getRegisteringTags(URL url) {
List<String> tags = new ArrayList<>();
String rawTag = url.getParameter(REGISTER_TAG);