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 2019/08/09 02:40:32 UTC

[dubbo] 02/04: Merge branch 'cloud-native' of https://github.com/apache/dubbo into cloud-native

This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch cloud-native
in repository https://gitbox.apache.org/repos/asf/dubbo.git

commit b7b34b6c475912c4c805b389954fd897bdd9f769
Merge: 550b404 03173f8
Author: ken.lj <ke...@gmail.com>
AuthorDate: Thu Aug 8 16:22:48 2019 +0800

    Merge branch 'cloud-native' of https://github.com/apache/dubbo into cloud-native

 .travis.yml                                        |   2 +-
 dubbo-bom/pom.xml                                  |   1 +
 dubbo-bootstrap/pom.xml                            |  40 +--
 .../org/apache/dubbo/bootstrap/DubboBootstrap.java |  25 +-
 .../bootstrap/DubboServiceConsumerBootstrap.java   |   3 +-
 ...ap.java => DubboServiceProvider2Bootstrap.java} |  34 +--
 dubbo-cluster/pom.xml                              |   1 +
 .../router/condition/config/ListenableRouter.java  |   2 +-
 .../dubbo/rpc/cluster/router/tag/TagRouter.java    |   2 +-
 .../support/wrapper/MockClusterInvoker.java        |   2 +-
 .../dubbo/rpc/cluster/router/TagRouterTest.java    |   5 +-
 .../support/AbstractClusterInvokerTest.java        |   2 +-
 dubbo-common/pom.xml                               |   1 +
 .../apache/dubbo/common/config/Configuration.java  |   2 -
 .../configcenter/AbstractDynamicConfiguration.java | 182 ++++++++++++
 .../config/configcenter/DynamicConfiguration.java  |  86 ++++--
 .../file/FileSystemDynamicConfiguration.java       |  23 +-
 .../configcenter/nop/NopDynamicConfiguration.java  |   6 +-
 .../wrapper/CompositeDynamicConfiguration.java     |   5 +
 .../dubbo/common/constants/CommonConstants.java    |   2 +-
 .../extension/AdaptiveClassCodeGenerator.java      |  10 +-
 .../apache/dubbo/common/bytecode/MixinTest.java    |   1 -
 .../common/config/InmemoryConfigurationTest.java   |   6 +-
 .../threadlocal/InternalThreadLocalTest.java       |   1 -
 .../apache/dubbo/common/utils/PojoUtilsTest.java   |   5 +-
 dubbo-compatible/pom.xml                           |   1 +
 .../dubbo/rpc/protocol/dubbo/FutureAdapter.java    |   6 +-
 .../org/apache/dubbo/config/MethodConfigTest.java  |   1 -
 .../org/apache/dubbo/filter/LegacyInvoker.java     |   2 +-
 .../java/org/apache/dubbo/rpc/RpcContextTest.java  |   6 +-
 dubbo-config/dubbo-config-api/pom.xml              |   1 +
 .../org/apache/dubbo/config/ApplicationConfig.java |   1 -
 .../org/apache/dubbo/config/ReferenceConfig.java   |  14 +-
 .../org/apache/dubbo/config/RegistryConfig.java    |  10 +-
 .../org/apache/dubbo/config/ServiceConfig.java     |   5 +-
 .../apache/dubbo/config/ReferenceConfigTest.java   |   8 +-
 .../ConfigurableMetadataServiceExporterTest.java   |   5 +-
 dubbo-config/dubbo-config-spring/pom.xml           |   1 +
 .../factory/annotation/ReferenceBeanBuilder.java   |   9 +
 .../ServiceAnnotationBeanPostProcessor.java        |  14 +
 .../dubbo/config/spring/util/AnnotationUtils.java  |  20 +-
 .../ReferenceAnnotationBeanPostProcessorTest.java  |  89 +++---
 .../ServiceAnnotationBeanPostProcessorTest.java    |  13 +
 .../context/annotation/EnableDubboConfigTest.java  |  11 +
 .../annotation/provider/DemoServiceImpl.java       |   4 +-
 .../DubboComponentScanRegistrarTest.java           | 118 --------
 .../DubboConfigBindingRegistrarTest.java           |  88 ------
 .../DubboConfigBindingsRegistrarTest.java          |  63 -----
 .../annotation/DubboConfigConfigurationTest.java   |  99 -------
 .../context/annotation/EnableDubboConfigTest.java  | 120 --------
 .../context/annotation/EnableDubboTest.java        | 162 -----------
 .../annotation/consumer/ConsumerConfiguration.java | 126 ---------
 .../consumer/test/TestConsumerConfiguration.java   |  96 -------
 .../annotation/provider/DemoServiceImpl.java       |  55 ----
 .../annotation/provider/ProviderConfiguration.java | 109 --------
 .../properties/DefaultDubboConfigBinderTest.java   |  94 -------
 dubbo-config/pom.xml                               |   1 +
 .../support/nop/NopDynamicConfigurationTest.java   |  70 -----
 .../dubbo-configcenter-apollo/pom.xml              |   1 +
 .../support/apollo/ApolloDynamicConfiguration.java |  10 +-
 .../dubbo-configcenter-consul/pom.xml              |   3 +-
 .../consul/ConsulDynamicConfiguration.java         |   6 +-
 dubbo-configcenter/dubbo-configcenter-etcd/pom.xml |   3 +-
 .../support/etcd/EtcdDynamicConfiguration.java     |  20 +-
 .../dubbo-configcenter-nacos/pom.xml               |   3 +-
 .../support/nacos/NacosDynamicConfiguration.java   |   8 +-
 .../nacos/NacosDynamicConfigurationTest.java       |   6 +-
 .../dubbo-configcenter-zookeeper/pom.xml           |   1 +
 .../zookeeper/ZookeeperDynamicConfiguration.java   |  84 +++---
 .../ZookeeperDynamicConfigurationTest.java         |   2 +-
 dubbo-configcenter/pom.xml                         |   1 +
 dubbo-container/dubbo-container-api/pom.xml        |   1 +
 dubbo-container/dubbo-container-log4j/pom.xml      |   1 +
 dubbo-container/dubbo-container-logback/pom.xml    |   1 +
 dubbo-container/dubbo-container-spring/pom.xml     |   1 +
 dubbo-container/pom.xml                            |   1 +
 .../dubbo-demo-annotation-consumer/pom.xml         |   3 +-
 .../resources/spring/dubbo-consumer.properties     |   2 +-
 .../dubbo-demo-annotation-provider/pom.xml         |   3 +-
 .../apache/dubbo/demo/provider/Application.java    |   6 +-
 .../dubbo-demo-api/dubbo-demo-api-consumer/pom.xml |   3 +-
 .../apache/dubbo/demo/consumer/Application.java    |   6 +-
 .../dubbo-demo-api/dubbo-demo-api-provider/pom.xml |   3 +-
 .../apache/dubbo/demo/provider/Application.java    |   6 +-
 dubbo-demo/dubbo-demo-api/pom.xml                  |   3 +-
 dubbo-demo/dubbo-demo-interface/pom.xml            |   1 +
 .../dubbo-demo-xml/dubbo-demo-xml-consumer/pom.xml |   1 +
 .../apache/dubbo/demo/consumer/Application.java    |   4 -
 .../src/main/resources/spring/dubbo-consumer.xml   |   4 +-
 .../dubbo-demo-xml/dubbo-demo-xml-provider/pom.xml |   4 +-
 .../apache/dubbo/demo/provider/Application.java    |   4 -
 .../src/main/resources/spring/dubbo-provider.xml   |   6 +-
 dubbo-demo/dubbo-demo-xml/pom.xml                  |   3 +-
 dubbo-demo/pom.xml                                 |   1 +
 dubbo-dependencies/pom.xml                         |   3 +-
 dubbo-distribution/pom.xml                         |   1 +
 dubbo-filter/dubbo-filter-cache/pom.xml            |   1 +
 dubbo-filter/dubbo-filter-validation/pom.xml       |   1 +
 dubbo-filter/pom.xml                               |   1 +
 dubbo-metadata/dubbo-metadata-api/pom.xml          |   1 +
 .../DynamicConfigurationServiceNameMapping.java    |  13 +-
 .../org/apache/dubbo/metadata/MetadataService.java |  99 +++++--
 .../org/apache/dubbo/metadata/MetadataUtil.java    |  33 +++
 .../dubbo/metadata/WritableMetadataService.java    |   2 +-
 .../definition/model/MethodDefinition.java         |  18 +-
 .../store/InMemoryWritableMetadataService.java     | 101 +++----
 .../store/RemoteWritableMetadataService.java       |  20 +-
 ...g.apache.dubbo.metadata.WritableMetadataService |   2 +-
 ...DynamicConfigurationServiceNameMappingTest.java |  38 +--
 .../InMemoryWritableMetadataServiceTest.java       |  32 ++-
 .../report/identifier/MetadataIdentifierTest.java  |   2 +-
 .../report/support/AbstractMetadataReportTest.java |  14 +-
 .../store/RemoteWritableMeatadataServiceTest.java  |   4 +-
 ...che.dubbo.metadata.report.MetadataReportFactory |   1 +
 .../dubbo-metadata-definition-protobuf/pom.xml     |   4 +-
 .../definition/protobuf/ProtobufTypeBuilder.java   | 308 +++++++++++++++++++++
 ...e.dubbo.metadata.definition.builder.TypeBuilder |   0
 .../protobuf/ProtobufTypeBuilderTest.java          |  71 +++++
 .../definition/protobuf/model/GooglePB.java        |   0
 .../protobuf/model/ServiceInterface.java           |   0
 .../dubbo-metadata-report-consul/pom.xml           |   3 +-
 dubbo-metadata/dubbo-metadata-report-etcd/pom.xml  |   3 +-
 dubbo-metadata/dubbo-metadata-report-nacos/pom.xml |   3 +-
 dubbo-metadata/dubbo-metadata-report-redis/pom.xml |   3 +-
 .../dubbo-metadata-report-zookeeper/pom.xml        |   4 +-
 dubbo-metadata/pom.xml                             |   2 +-
 dubbo-monitor/dubbo-monitor-api/pom.xml            |   1 +
 dubbo-monitor/dubbo-monitor-default/pom.xml        |   1 +
 .../dubbo/monitor/dubbo/MetricsFilterTest.java     |   2 -
 dubbo-monitor/pom.xml                              |   1 +
 dubbo-plugin/dubbo-qos/pom.xml                     |   1 +
 .../dubbo/qos/command/util/CommandHelperTest.java  |   3 +-
 dubbo-plugin/pom.xml                               |   3 +-
 dubbo-registry/dubbo-registry-api/pom.xml          |   1 +
 .../dubbo/registry/client/ServiceInstance.java     |  43 ---
 .../CompositeMetadataServiceURLBuilder.java        |  81 ++++++
 ...ExportedServicesRevisionMetadataCustomizer.java |   4 +-
 .../client/metadata/MetadataServiceProxy.java      |   9 +-
 .../client/metadata/MetadataServiceURLBuilder.java |  60 ++--
 ...MetadataServiceURLParamsMetadataCustomizer.java |   4 +-
 .../metadata/ServiceInstanceMetadataUtils.java     |  14 +-
 .../SpringCloudMetadataServiceURLBuilder.java      |  49 ++++
 ...java => StandardMetadataServiceURLBuilder.java} |  13 +-
 .../proxy/DefaultMetadataServiceProxyFactory.java  |  11 +-
 .../proxy/MetadataServiceProxyFactory.java         |   2 +-
 .../registry/support/ServiceOrientedRegistry.java  |  32 ++-
 ...try.client.metadata.MetadataServiceProxyFactory |   1 -
 ...ient.metadata.proxy.MetadataServiceProxyFactory |   2 +-
 ...istry.client.metadata.MetadataServiceURLBuilder |   2 +
 .../client/DefaultServiceInstanceTest.java         |  36 ++-
 .../CustomizableServiceInstanceListenerTest.java   |  29 +-
 .../event/listener/LoggingEventListenerTest.java   |  85 ++++++
 .../ServiceInstancesChangedListenerTest.java       |  54 ++++
 .../metadata/MetadataServiceURLBuilderTest.java    |  53 ++++
 .../metadata/ServiceInstanceMetadataUtilsTest.java |  17 +-
 .../SpringCloudMetadataServiceURLBuilderTest.java  |  51 ++++
 .../support/ServiceOrientedRegistryTest.java       |  32 ++-
 dubbo-registry/dubbo-registry-consul/pom.xml       |   1 +
 .../registry/consul/AbstractConsulRegistry.java    |  27 ++
 .../dubbo/registry/consul/ConsulRegistry.java      |  23 +-
 .../registry/consul/ConsulServiceDiscovery.java    | 196 +++++++++++++
 .../consul/ConsulServiceDiscoveryFactory.java      |  19 +-
 dubbo-registry/dubbo-registry-default/pom.xml      |   1 +
 .../dubbo/registry/dubbo/RegistryProtocolTest.java |   2 +-
 dubbo-registry/dubbo-registry-etcd3/pom.xml        |   1 +
 .../dubbo/registry/etcd/EtcdServiceDiscovery.java  |  13 +-
 .../dubbo/registry/etcd/EtcdRegistryTest.java      |   2 +-
 dubbo-registry/dubbo-registry-multicast/pom.xml    |   1 +
 .../registry/multicast/MulticastRegistry.java      |   6 +-
 dubbo-registry/dubbo-registry-multiple/pom.xml     |   1 +
 .../dubbo/registry/nacos/NacosRegistryFactory.java |   3 -
 .../nacos/util/NacosNamingServiceUtils.java        |   3 +-
 dubbo-registry/dubbo-registry-redis/pom.xml        |   1 +
 dubbo-registry/dubbo-registry-zookeeper/pom.xml    |   1 +
 .../registry/zookeeper/ZookeeperRegistry.java      |   2 -
 .../zookeeper/ZookeeperServiceDiscovery.java       |  37 +++
 .../registry/zookeeper/ZookeeperRegistryTest.java  |   3 +-
 .../zookeeper/ZookeeperServiceDiscoveryTest.java   |   2 +
 dubbo-registry/pom.xml                             |   1 +
 dubbo-remoting/dubbo-remoting-api/pom.xml          |   1 +
 .../dubbo/remoting/PerformanceClientFixedTest.java |   2 +-
 .../remoting/transport/AbstractCodecTest.java      |   5 +-
 dubbo-remoting/dubbo-remoting-etcd3/pom.xml        |   1 +
 dubbo-remoting/dubbo-remoting-grizzly/pom.xml      |   1 +
 dubbo-remoting/dubbo-remoting-http/pom.xml         |   1 +
 dubbo-remoting/dubbo-remoting-mina/pom.xml         |   1 +
 dubbo-remoting/dubbo-remoting-netty/pom.xml        |   1 +
 dubbo-remoting/dubbo-remoting-netty4/pom.xml       |   1 +
 dubbo-remoting/dubbo-remoting-p2p/pom.xml          |   1 +
 dubbo-remoting/dubbo-remoting-zookeeper/pom.xml    |   1 +
 .../zookeeper/curator/CuratorZookeeperClient.java  |   5 +
 dubbo-remoting/pom.xml                             |   1 +
 dubbo-rpc/dubbo-rpc-api/pom.xml                    |   1 +
 .../dubbo/rpc/filter/AccessLogFilterTest.java      |   7 +-
 .../apache/dubbo/rpc/support/BlockMyInvoker.java   |   2 +-
 .../apache/dubbo/rpc/support/MockInvokerTest.java  |  11 +-
 .../org/apache/dubbo/rpc/support/MyInvoker.java    |   2 +-
 .../org/apache/dubbo/rpc/support/RpcUtilsTest.java |   4 +-
 dubbo-rpc/dubbo-rpc-dubbo/pom.xml                  |   1 +
 .../dubbo/rpc/protocol/dubbo/DubboProtocol.java    |   2 +-
 .../dubbo/ReferenceCountExchangeClient.java        |   3 +
 dubbo-rpc/dubbo-rpc-hessian/pom.xml                |   1 +
 dubbo-rpc/dubbo-rpc-http/pom.xml                   |   1 +
 dubbo-rpc/dubbo-rpc-injvm/pom.xml                  |   1 +
 dubbo-rpc/dubbo-rpc-jsonrpc/pom.xml                |   1 +
 dubbo-rpc/dubbo-rpc-memcached/pom.xml              |   1 +
 dubbo-rpc/dubbo-rpc-native-thrift/pom.xml          |   1 +
 dubbo-rpc/dubbo-rpc-redis/pom.xml                  |   1 +
 dubbo-rpc/dubbo-rpc-rest/pom.xml                   |   1 +
 .../DubboSwaggerApiListingResourceTest.java        |   4 +-
 dubbo-rpc/dubbo-rpc-rmi/pom.xml                    |   1 +
 .../dubbo/rpc/protocol/rmi/RmiProtocolTest.java    |   4 +-
 dubbo-rpc/dubbo-rpc-thrift/pom.xml                 |   1 +
 dubbo-rpc/dubbo-rpc-webservice/pom.xml             |   1 +
 dubbo-rpc/dubbo-rpc-xml/pom.xml                    |   1 +
 .../xml/rpc/protocol/xmlrpc/XmlRpcProtocol.java    |   2 +-
 dubbo-rpc/pom.xml                                  |   1 +
 .../dubbo-serialization-api/pom.xml                |   1 +
 .../dubbo-serialization-avro/pom.xml               |   1 +
 .../common/serialize/avro/AvroObjectInput.java     |   3 +-
 .../common/serialize/avro/AvroObjectOutput.java    |   3 +-
 .../dubbo-serialization-fastjson/pom.xml           |   1 +
 .../dubbo-serialization-fst/pom.xml                |   1 +
 .../dubbo-serialization-gson/pom.xml               |   1 +
 .../dubbo-serialization-hessian2/pom.xml           |   1 +
 .../dubbo-serialization-jdk/pom.xml                |   1 +
 .../dubbo-serialization-kryo/pom.xml               |   1 +
 .../dubbo-serialization-native-hession/pom.xml     |   3 +-
 .../dubbo-serialization-protobuf-json/pom.xml      |   3 +-
 .../dubbo-serialization-protostuff/pom.xml         |   3 +-
 .../serialize/protostuff/utils/WrapperUtils.java   |   2 +-
 .../dubbo-serialization-test/pom.xml               |   3 +-
 .../serialize/hessian2/Hessian2PersonOkTest.java   |   1 +
 .../support/GenericProtobufObjectOutputTest.java   |   1 +
 .../protostuff/ProtostuffObjectOutputTest.java     |  10 +-
 .../support/SerializableClassRegistryTest.java     |   3 +-
 dubbo-serialization/pom.xml                        |   1 +
 237 files changed, 2108 insertions(+), 1932 deletions(-)

diff --cc dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
index e88d9ac,ab20a6f..fbc523a
--- a/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
+++ b/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
@@@ -264,8 -256,8 +260,7 @@@ public class DubboBootstrap 
          return this;
      }
  
 -
      // {@link ServiceConfig} correlative methods
- 
      public <S> DubboBootstrap service(Consumer<ServiceBuilder<S>> consumerBuilder) {
          return service(DEFAULT_SERVICE_ID, consumerBuilder);
      }
@@@ -281,8 -273,8 +276,7 @@@
          return this;
      }
  
 -
      // {@link Reference} correlative methods
- 
      public <S> DubboBootstrap reference(Consumer<ReferenceBuilder<S>> consumerBuilder) {
          return reference(DEFAULT_REFERENCE_ID, consumerBuilder);
      }
@@@ -298,8 -290,8 +292,7 @@@
          return this;
      }
  
 -
      // {@link ProviderConfig} correlative methods
- 
      public DubboBootstrap provider(Consumer<ProviderBuilder> builderConsumer) {
          return provider(DEFAULT_PROVIDER_ID, builderConsumer);
      }
@@@ -319,8 -311,8 +312,7 @@@
          return this;
      }
  
 -
      // {@link ConsumerConfig} correlative methods
- 
      public DubboBootstrap consumer(Consumer<ConsumerBuilder> builderConsumer) {
          return consumer(DEFAULT_CONSUMER_ID, builderConsumer);
      }
@@@ -571,14 -560,11 +563,13 @@@
          return new ConsumerBuilder().id(id);
      }
  
 -
      /* serve for builder apis, end */
- 
      private void startMetadataReport() {
 -        ApplicationConfig applicationConfig = configManager.getApplication().orElseThrow(() -> new IllegalStateException("There's no ApplicationConfig specified."));
 +        ApplicationConfig applicationConfig = configManager.getApplication().orElseThrow(
 +                () -> new IllegalStateException("There's no ApplicationConfig specified.")
 +        );
  
 +        String metadataType = applicationConfig.getMetadata();
          // FIXME, multiple metadata config support.
          Collection<MetadataReportConfig> metadataReportConfigs = configManager.getMetadataConfigs();
          if (CollectionUtils.isEmpty(metadataReportConfigs)) {
@@@ -668,52 -653,25 +659,56 @@@
          serviceConfig.export();
      }
  
+     public boolean isOnlyRegisterProvider() {
+         return onlyRegisterProvider;
+     }
+ 
 -    private void registerServiceInstance(List<URL> exportedURLs) {
 +    private void registerServiceInstance(ApplicationConfig applicationConfig) {
 +        ExtensionLoader<Protocol> loader = ExtensionLoader.getExtensionLoader(Protocol.class);
 +        Set<String> protocols = loader.getLoadedExtensions();
 +        if (CollectionUtils.isEmpty(protocols)) {
 +            throw new IllegalStateException("There should has at least one Protocol specified.");
 +        }
 +
 +        String protocol = findOneProtocolForServiceInstance(protocols);
  
 -        exportedURLs
 -                .stream()
 -                .findFirst()
 -                .ifPresent(url -> {
 -                    String serviceName = url.getParameter(APPLICATION_KEY);
 -                    String host = url.getHost();
 -                    int port = url.getPort();
 +        Protocol protocolInstance = loader.getExtension(protocol);
  
 -                    ServiceInstance serviceInstance = initServiceInstance(serviceName, host, port);
 +        String serviceName = applicationConfig.getName();
 +        // TODO, only support exporting one server
 +        ProtocolServer server = protocolInstance.getServers().get(0);
 +        String[] address = server.getAddress().split(GROUP_CHAR_SEPERATOR);
 +        String host = address[0];
 +        int port = Integer.parseInt(address[1]);
  
 -                    getServiceDiscoveries().forEach(serviceDiscovery -> serviceDiscovery.register(serviceInstance));
 +        ServiceInstance serviceInstance = initServiceInstance(
 +                serviceName,
 +                host,
 +                port,
 +                applicationConfig.getMetadata() == null ? METADATA_DEFAULT : applicationConfig.getMetadata()
 +        );
  
 -                });
 +        getServiceDiscoveries().forEach(serviceDiscovery -> serviceDiscovery.register(serviceInstance));
 +    }
 +
 +    /**
 +     * If use rest protocol if there's one, otherwise, choose the first one available.
 +     *
 +     * @return
 +     */
 +    private String findOneProtocolForServiceInstance(Set<String> protocols) {
 +        String result = null;
 +        for (String protocol : protocols) {
 +            if ("rest".equals(protocol)) {
 +                result = protocol;
 +                break;
 +            }
 +        }
 +
 +        if (result == null) {
 +            result = protocols.iterator().next();
 +        }
 +        return result;
      }
  
      private void unregisterServiceInstance() {
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ExportedServicesRevisionMetadataCustomizer.java
index 8c3c9d5,188312e..4887457
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ExportedServicesRevisionMetadataCustomizer.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ExportedServicesRevisionMetadataCustomizer.java
@@@ -48,10 -47,8 +48,10 @@@ public class ExportedServicesRevisionMe
  
      @Override
      protected String buildMetadataValue(ServiceInstance serviceInstance) {
 -        WritableMetadataService writableMetadataService = WritableMetadataService.getDefaultExtension();
 +        WritableMetadataService writableMetadataService = WritableMetadataService.getExtension(
 +                serviceInstance.getMetadata().get(METADATA_KEY)
 +        );
-         List<String> exportedURLs = writableMetadataService.getExportedURLs();
+         SortedSet<String> exportedURLs = writableMetadataService.getExportedURLs();
          Object[] data = exportedURLs.stream()
                  .map(URL::valueOf)                       // String to URL
                  .map(URL::getServiceInterface)           // get the service interface
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizer.java
index ed86919,fadc9c4..cf5cc51
--- 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
@@@ -22,9 -22,8 +22,9 @@@ import org.apache.dubbo.metadata.Writab
  import org.apache.dubbo.registry.client.ServiceInstance;
  import org.apache.dubbo.registry.client.ServiceInstanceMetadataCustomizer;
  
- import java.util.List;
+ import java.util.SortedSet;
  
 +import static org.apache.dubbo.common.constants.CommonConstants.METADATA_KEY;
  import static org.apache.dubbo.metadata.MetadataService.toURLs;
  import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.METADATA_SERVICE_URL_PARAMS_KEY;
  import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.getMetadataServiceParameter;