You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/09/02 08:24:05 UTC

[dubbo] branch 3.0-multi-instances updated (ccdc691 -> d183d9b)

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

albumenj pushed a change to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git.


    from ccdc691  Fix ut in DubboBootstrapTest
     add 23e2f4d  Verify remote refer for registry (#8645)
     add 8a30700  [3.0-Triple] Remove throwable tw-bin header and truncate exception  (#8642)
     add 7d84894  [3.0-triple] Add tri inner health service (#8644)
     add 067dba3  When use delay to export service, catch the exception and log it. (#8584)
     add 17042b4  test: Support checking metadata service in multiple registry center (#8606)
     add 2c5d60f  optimize: example add Triple protocol Demo (#8643)
     add b8de0a7  [3.0] Add  gen MethodDescriptor valid, avoid strange situations (#8651)
     new ffaa007  Merge branch 'apache-3.0' into 3.0-multi-instances
     new d183d9b  Fix uts

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/dubbo/rpc/cluster/RouterChain.java  |  14 +-
 .../cluster/support/wrapper/AbstractCluster.java   |   4 +
 .../support/wrapper/MockClusterWrapper.java        |   5 +-
 .../apache/dubbo/rpc/cluster/RouterChainTest.java  |  36 +-
 .../support/wrapper/AbstractClusterTest.java       | 106 ++++
 .../wrapper/DemoClusterFilter.java}                |  25 +-
 ...g.apache.dubbo.rpc.cluster.filter.ClusterFilter |   1 +
 dubbo-common/pom.xml                               |  14 +
 .../java/org/apache/dubbo/common/URLBuilder.java   |  17 +
 .../url/component/DubboServiceAddressURL.java      |   1 +
 .../common/url/component/ServiceConfigURL.java     |   2 +
 .../apache/dubbo/rpc/model/MethodDescriptor.java   | 166 ++++++-
 .../apache/dubbo/descriptor/DescriptorService.java |  65 +++
 .../dubbo/descriptor/MethodDescriptorTest.java     | 157 +++++-
 .../org/apache/dubbo/config/ReferenceConfig.java   |   7 +-
 .../org/apache/dubbo/config/ServiceConfig.java     |  12 +-
 .../apache/dubbo/config/ReferenceConfigTest.java   | 118 ++++-
 ...istryCenterExportMetadataExporterListener.java} |   4 +-
 ...gistryCenterExportMetadataIntegrationTest.java} |  48 +-
 ...ltipleRegistryCenterExportMetadataService.java} |   6 +-
 ...leRegistryCenterExportMetadataServiceImpl.java} |   6 +-
 ...gistryCenterExportMetadataServiceListener.java} |   6 +-
 .../org.apache.dubbo.config.ServiceListener        |   1 +
 .../services/org.apache.dubbo.rpc.ExporterListener |   1 +
 .../registrycenter/AbstractRegistryCenter.java     |   4 +-
 .../{GreetingService.java => TripleService.java}   |   5 +-
 .../dubbo-demo-xml/dubbo-demo-xml-consumer/pom.xml |   4 +
 .../apache/dubbo/demo/consumer/Application.java    |  17 +
 .../src/main/resources/spring/dubbo-consumer.xml   |   3 +
 .../dubbo-demo-xml/dubbo-demo-xml-provider/pom.xml |   4 +
 ...tingServiceImpl.java => TripleServiceImpl.java} |  11 +-
 .../src/main/resources/spring/dubbo-provider.xml   |   4 +
 .../dubbo/registry/client/InstanceAddressURL.java  |   2 +
 .../registry/client/ServiceDiscoveryRegistry.java  |   6 +-
 .../client/ServiceDiscoveryRegistryDirectory.java  |  17 +-
 .../client/migration/MigrationInvoker.java         |   8 +
 .../registry/integration/DynamicDirectory.java     |  75 ++-
 .../InterfaceCompatibleRegistryProtocol.java       |   1 +
 .../registry/integration/RegistryDirectory.java    |  21 +-
 .../registry/integration/RegistryProtocol.java     |  18 +-
 ...est.java => CacheableFallbackRegistryTest.java} |  31 +-
 .../registry/ListenerRegistryWrapperTest.java      |  84 ++++
 .../dubbo/registry/RegistryFactoryWrapperTest.java |   2 +-
 .../dubbo/registry/RegistryServiceListener1.java   |   2 +-
 .../dubbo/registry/RegistryServiceListener2.java   |   2 +-
 .../store/RemoteMetadataServiceImplTest.java       |  21 -
 .../client/migration/MigrationRuleHandlerTest.java |   2 +-
 .../integration/CountRegistryProtocolListener.java |  33 +-
 .../DemoService.java}                              |   4 +-
 .../registry/integration/DynamicDirectoryTest.java | 173 +++++++
 .../registry/integration/RegistryProtocolTest.java | 540 +++++++++++++++++++++
 ...o.registry.integration.RegistryProtocolListener |   1 +
 .../dubbo/rpc/protocol/grpc/GrpcProtocolTest.java  |  22 +
 .../protocol/grpc/support/DubboGreeterGrpc.java    |   3 +-
 dubbo-rpc/dubbo-rpc-triple/pom.xml                 |  10 +
 .../dubbo/rpc/protocol/tri/AbstractStream.java     |  58 +--
 .../dubbo/rpc/protocol/tri/ExceptionUtils.java     |   8 +-
 .../apache/dubbo/rpc/protocol/tri/GrpcStatus.java  |   9 +-
 .../rpc/protocol/tri/ServerTransportObserver.java  |   4 +-
 .../dubbo/rpc/protocol/tri/TripleHeaderEnum.java   |   3 +-
 .../dubbo/rpc/protocol/tri/TripleProtocol.java     |  11 +
 .../dubbo/rpc/protocol/tri/UnaryClientStream.java  |  60 +--
 .../protocol/tri/service/HealthStatusManager.java  |  74 +++
 .../protocol/tri/service/TriBuiltinService.java    |  86 ++++
 .../rpc/protocol/tri/service/TriHealthImpl.java    | 145 ++++++
 .../dubbo-rpc-triple/src/main/proto/health.proto   |  66 +++
 .../dubbo/rpc/protocol/tri/TripleProtocolTest.java |  21 +-
 .../dubbo/rpc/protocol/tri/support/IGreeter.java   |  11 +
 .../rpc/protocol/tri/support/IGreeterImpl.java     |   9 +
 pom.xml                                            |   1 +
 70 files changed, 2202 insertions(+), 316 deletions(-)
 copy dubbo-remoting/dubbo-remoting-api/src/test/java/org/apache/dubbo/remoting/api/PortUnificationServerTest.java => dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/RouterChainTest.java (51%)
 create mode 100644 dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/wrapper/AbstractClusterTest.java
 copy dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/{filter/LogFilter.java => support/wrapper/DemoClusterFilter.java} (75%)
 create mode 100644 dubbo-cluster/src/test/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter
 copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/{single/exportmetadata/SingleRegistryCenterExportMetadataExporterListener.java => multiple/exportmetadata/MultipleRegistryCenterExportMetadataExporterListener.java} (87%)
 copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/{single/exportmetadata/SingleRegistryCenterExportMetadataIntegrationTest.java => multiple/exportmetadata/MultipleRegistryCenterExportMetadataIntegrationTest.java} (77%)
 copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/{single/exportmetadata/SingleRegistryCenterExportMetadataService.java => multiple/exportmetadata/MultipleRegistryCenterExportMetadataService.java} (84%)
 copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/{single/injvm/SingleRegistryCenterInjvmServiceImpl.java => multiple/exportmetadata/MultipleRegistryCenterExportMetadataServiceImpl.java} (78%)
 copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/{single/exportmetadata/SingleRegistryCenterExportMetadataServiceListener.java => multiple/exportmetadata/MultipleRegistryCenterExportMetadataServiceListener.java} (83%)
 copy dubbo-demo/dubbo-demo-interface/src/main/java/org/apache/dubbo/demo/{GreetingService.java => TripleService.java} (94%)
 copy dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-provider/src/main/java/org/apache/dubbo/demo/provider/{GreetingServiceImpl.java => TripleServiceImpl.java} (85%)
 rename dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/{CacheableFailbackRegistryTest.java => CacheableFallbackRegistryTest.java} (88%)
 create mode 100644 dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/ListenerRegistryWrapperTest.java
 delete mode 100644 dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImplTest.java
 copy dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/MockProtocol.java => dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/CountRegistryProtocolListener.java (58%)
 rename dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/{DelayedRegistryNotifierTest.java => integration/DemoService.java} (91%)
 create mode 100644 dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/DynamicDirectoryTest.java
 create mode 100644 dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/RegistryProtocolTest.java
 create mode 100644 dubbo-registry/dubbo-registry-api/src/test/resources/META-INF/dubbo/org.apache.dubbo.registry.integration.RegistryProtocolListener
 create mode 100644 dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/service/HealthStatusManager.java
 create mode 100644 dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/service/TriBuiltinService.java
 create mode 100644 dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/service/TriHealthImpl.java
 create mode 100644 dubbo-rpc/dubbo-rpc-triple/src/main/proto/health.proto

[dubbo] 02/02: Fix uts

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git

commit d183d9b035b19c260d03a612e23eeff47fbd1278
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Thu Sep 2 16:23:16 2021 +0800

    Fix uts
---
 .../org/apache/dubbo/config/ReferenceConfig.java   |   2 +
 .../apache/dubbo/config/ReferenceConfigTest.java   |  91 +++---------------
 .../registry/integration/RegistryProtocolTest.java | 106 ++++++++++-----------
 .../dubbo/rpc/protocol/grpc/GrpcProtocolTest.java  |   4 +-
 4 files changed, 67 insertions(+), 136 deletions(-)

diff --git 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
index 5b1cd75..97e52f6 100644
--- 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
@@ -421,6 +421,7 @@ public class ReferenceConfig<T> extends ReferenceConfigBase<T> {
                 if (StringUtils.isEmpty(url.getPath())) {
                     url = url.setPath(interfaceName);
                 }
+                url = url.setScopeModel(getScopeModel());
                 url = url.setServiceModel(consumerModel);
                 if (UrlUtils.isRegistry(url)) {
                     urls.add(url.putAttribute(REFER_KEY, referenceParameters));
@@ -445,6 +446,7 @@ public class ReferenceConfig<T> extends ReferenceConfigBase<T> {
                 if (monitorUrl != null) {
                     u = u.putAttribute(MONITOR_KEY, monitorUrl);
                 }
+                u = u.setScopeModel(getScopeModel());
                 u = u.setServiceModel(consumerModel);
                 urls.add(u.putAttribute(REFER_KEY, referenceParameters));
             }
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
index ed45fda..fa64410 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
@@ -28,9 +28,6 @@ import org.apache.dubbo.config.annotation.Reference;
 import org.apache.dubbo.config.api.DemoService;
 import org.apache.dubbo.config.bootstrap.DubboBootstrap;
 import org.apache.dubbo.config.provider.impl.DemoServiceImpl;
-
-import org.apache.dubbo.metadata.report.MetadataReport;
-import org.apache.dubbo.metadata.report.MetadataReportInstance;
 import org.apache.dubbo.registry.client.migration.MigrationInvoker;
 import org.apache.dubbo.rpc.Exporter;
 import org.apache.dubbo.rpc.ProxyFactory;
@@ -480,9 +477,6 @@ public class ReferenceConfigTest {
         Assertions.assertEquals("value2", url.getParameter("key2"));
 
         dubboBootstrap.stop();
-
-        applicationModelMockedStatic.closeOnDemand();
-        metadataReportInstanceMockedStatic.closeOnDemand();
     }
 
     /**
@@ -498,10 +492,7 @@ public class ReferenceConfigTest {
         referenceConfig.setLazy(false);
         referenceConfig.setInjvm(false);
 
-        DubboBootstrap.getInstance()
-            .application("application1")
-            .initialize();
-        referenceConfig.setBootstrap(DubboBootstrap.getInstance());
+        DubboBootstrap dubboBootstrap = DubboBootstrap.newInstance(FrameworkModel.defaultModel());
 
         ApplicationConfig applicationConfig = new ApplicationConfig();
         applicationConfig.setName("application1");
@@ -510,35 +501,6 @@ public class ReferenceConfigTest {
         parameters.put("key2", "value2");
         applicationConfig.setParameters(parameters);
 
-        ConfigManager configManager = mock(ConfigManager.class);
-        Environment environment = mock(Environment.class);
-        CompositeConfiguration compositeConfiguration = mock(CompositeConfiguration.class);
-        Configuration dynamicGlobalConfiguration = mock(Configuration.class);
-        ServiceRepository serviceRepository = mock(ServiceRepository.class);
-        ConsumerModel consumerModel = mock(ConsumerModel.class);
-
-        when(configManager.getApplicationOrElseThrow()).thenReturn(applicationConfig);
-
-        MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
-        applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
-        applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-        applicationModelMockedStatic.when(ApplicationModel::getServiceRepository).thenReturn(serviceRepository);
-        when(environment.getConfiguration()).thenReturn(compositeConfiguration);
-        when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
-        when(compositeConfiguration.convert(Boolean.class, ENABLE_CONFIGURATION_LISTEN, true))
-            .thenReturn(true);
-
-        MockedStatic<MetadataReportInstance> metadataReportInstanceMockedStatic =
-            Mockito.mockStatic(MetadataReportInstance.class);
-
-        MetadataReport metadataReport = mock(MetadataReport.class);
-        metadataReportInstanceMockedStatic.when(() -> MetadataReportInstance.getMetadataReport("default"))
-            .thenReturn(metadataReport);
-
-
-        when(serviceRepository.lookupReferredService("org.apache.dubbo.config.api.DemoService"))
-            .thenReturn(consumerModel);
-
         referenceConfig.refreshed.set(true);
         referenceConfig.setInterface(DemoService.class);
         referenceConfig.getInterfaceClass();
@@ -550,11 +512,15 @@ public class ReferenceConfigTest {
 
         referenceConfig.setRegistry(registry);
 
+        dubboBootstrap
+            .application(applicationConfig)
+            .reference(referenceConfig)
+            .initialize();
+
         referenceConfig.init();
         Assertions.assertTrue(referenceConfig.getInvoker() instanceof MigrationInvoker);
 
-        applicationModelMockedStatic.closeOnDemand();
-        metadataReportInstanceMockedStatic.closeOnDemand();
+        dubboBootstrap.destroy();
     }
 
     /**
@@ -570,10 +536,7 @@ public class ReferenceConfigTest {
         referenceConfig.setLazy(false);
         referenceConfig.setInjvm(false);
 
-        DubboBootstrap.getInstance()
-            .application("application1")
-            .initialize();
-        referenceConfig.setBootstrap(DubboBootstrap.getInstance());
+        DubboBootstrap dubboBootstrap = DubboBootstrap.newInstance(FrameworkModel.defaultModel());
 
         ApplicationConfig applicationConfig = new ApplicationConfig();
         applicationConfig.setName("application1");
@@ -582,46 +545,22 @@ public class ReferenceConfigTest {
         parameters.put("key2", "value2");
         applicationConfig.setParameters(parameters);
 
-        ConfigManager configManager = mock(ConfigManager.class);
-        Environment environment = mock(Environment.class);
-        CompositeConfiguration compositeConfiguration = mock(CompositeConfiguration.class);
-        Configuration dynamicGlobalConfiguration = mock(Configuration.class);
-        ServiceRepository serviceRepository = mock(ServiceRepository.class);
-        ConsumerModel consumerModel = mock(ConsumerModel.class);
-
-        when(configManager.getApplicationOrElseThrow()).thenReturn(applicationConfig);
-
-        MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
-        applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
-        applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-        applicationModelMockedStatic.when(ApplicationModel::getServiceRepository).thenReturn(serviceRepository);
-        when(environment.getConfiguration()).thenReturn(compositeConfiguration);
-        when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
-        when(compositeConfiguration.convert(Boolean.class, ENABLE_CONFIGURATION_LISTEN, true))
-            .thenReturn(true);
-
-        MockedStatic<MetadataReportInstance> metadataReportInstanceMockedStatic =
-            Mockito.mockStatic(MetadataReportInstance.class);
-
-        MetadataReport metadataReport = mock(MetadataReport.class);
-        metadataReportInstanceMockedStatic.when(() -> MetadataReportInstance.getMetadataReport("default"))
-            .thenReturn(metadataReport);
-
-
-        when(serviceRepository.lookupReferredService("org.apache.dubbo.config.api.DemoService"))
-            .thenReturn(consumerModel);
-
         referenceConfig.refreshed.set(true);
         referenceConfig.setInterface(DemoService.class);
         referenceConfig.getInterfaceClass();
         referenceConfig.setCheck(false);
 
         referenceConfig.setUrl(registryUrl);
+
+        dubboBootstrap
+            .application(applicationConfig)
+            .reference(referenceConfig)
+            .initialize();
+
         referenceConfig.init();
         Assertions.assertTrue(referenceConfig.getInvoker() instanceof MigrationInvoker);
+        dubboBootstrap.destroy();
 
-        applicationModelMockedStatic.closeOnDemand();
-        metadataReportInstanceMockedStatic.closeOnDemand();
     }
 
 
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/RegistryProtocolTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/RegistryProtocolTest.java
index 9f1e635..14e42e9 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/RegistryProtocolTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/RegistryProtocolTest.java
@@ -35,10 +35,10 @@ import org.apache.dubbo.rpc.cluster.support.FailoverCluster;
 import org.apache.dubbo.rpc.cluster.support.MergeableCluster;
 import org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterWrapper;
 import org.apache.dubbo.rpc.model.ApplicationModel;
+
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
-import org.mockito.MockedStatic;
 import org.mockito.Mockito;
 
 import java.io.IOException;
@@ -47,10 +47,10 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;
+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;
 import static org.apache.dubbo.common.constants.RegistryConstants.CATEGORY_KEY;
 import static org.apache.dubbo.common.constants.RegistryConstants.CONSUMERS_CATEGORY;
 import static org.apache.dubbo.registry.Constants.ENABLE_CONFIGURATION_LISTEN;
@@ -59,16 +59,16 @@ import static org.apache.dubbo.remoting.Constants.CHECK_KEY;
 import static org.apache.dubbo.rpc.cluster.Constants.CONSUMER_URL_KEY;
 import static org.apache.dubbo.rpc.cluster.Constants.REFER_KEY;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.mockStatic;
+import static org.mockito.Mockito.when;
 
 public class RegistryProtocolTest {
 
     @AfterEach
     public void tearDown() throws IOException {
         Mockito.framework().clearInlineMocks();
+        ApplicationModel.defaultModel().destroy();
     }
 
     /**
@@ -92,10 +92,6 @@ public class RegistryProtocolTest {
         when(environment.getConfiguration()).thenReturn(compositeConfiguration);
         when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
 
-        MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
-        applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
-        applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
         Map<String, String> parameters = new HashMap<>();
         parameters.put(INTERFACE_KEY, DemoService.class.getName());
         parameters.put("registry", "zookeeper");
@@ -117,7 +113,14 @@ public class RegistryProtocolTest {
         Registry registry = mock(Registry.class);
 
         RegistryProtocol registryProtocol = new RegistryProtocol();
-        registryProtocol.setRegistryFactory(registryFactory);
+
+        ApplicationModel applicationModel = Mockito.spy(ApplicationModel.defaultModel());
+        applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig("application1"));
+        ExtensionLoader<RegistryFactory> extensionLoaderMock = mock(ExtensionLoader.class);
+        Mockito.when(applicationModel.getExtensionLoader(RegistryFactory.class)).thenReturn(extensionLoaderMock);
+        Mockito.when(extensionLoaderMock.getAdaptiveExtension()).thenReturn(registryFactory);
+        url = url.setScopeModel(applicationModel);
+
 
         when(registryFactory.getRegistry(registryProtocol.getRegistryUrl(url))).thenReturn(registry);
 
@@ -135,8 +138,6 @@ public class RegistryProtocolTest {
         Assertions.assertEquals(parameters.get(REGISTER_IP_KEY), consumerUrl.getHost());
         Assertions.assertFalse(consumerUrl.getAttributes().containsKey(REFER_KEY));
         Assertions.assertEquals("value1", consumerUrl.getAttribute("key1"));
-
-        applicationModelMockedStatic.closeOnDemand();
     }
 
     /**
@@ -160,10 +161,6 @@ public class RegistryProtocolTest {
         when(environment.getConfiguration()).thenReturn(compositeConfiguration);
         when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
 
-        MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
-        applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
-        applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
         Map<String, String> parameters = new HashMap<>();
         parameters.put(INTERFACE_KEY, DemoService.class.getName());
         parameters.put("registry", "zookeeper");
@@ -182,10 +179,16 @@ public class RegistryProtocolTest {
         URL url = serviceConfigURL.addAttributes(attributes);
 
         RegistryFactory registryFactory = mock(RegistryFactory.class);
-        Registry registry = mock(Registry.class);
 
         RegistryProtocol registryProtocol = new RegistryProtocol();
-        registryProtocol.setRegistryFactory(registryFactory);
+        Registry registry = mock(Registry.class);
+
+        ApplicationModel applicationModel = Mockito.spy(ApplicationModel.defaultModel());
+        applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig("application1"));
+        ExtensionLoader<RegistryFactory> extensionLoaderMock = mock(ExtensionLoader.class);
+        Mockito.when(applicationModel.getExtensionLoader(RegistryFactory.class)).thenReturn(extensionLoaderMock);
+        Mockito.when(extensionLoaderMock.getAdaptiveExtension()).thenReturn(registryFactory);
+        url = url.setScopeModel(applicationModel);
 
         when(registryFactory.getRegistry(registryProtocol.getRegistryUrl(url))).thenReturn(registry);
 
@@ -204,7 +207,6 @@ public class RegistryProtocolTest {
         Assertions.assertFalse(consumerUrl.getAttributes().containsKey(REFER_KEY));
         Assertions.assertEquals("value1", consumerUrl.getAttribute("key1"));
 
-        applicationModelMockedStatic.closeOnDemand();
     }
 
     /**
@@ -232,10 +234,6 @@ public class RegistryProtocolTest {
         when(environment.getConfiguration()).thenReturn(compositeConfiguration);
         when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
 
-        MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
-        applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
-        applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
         Map<String, String> parameters = new HashMap<>();
         parameters.put(INTERFACE_KEY, DemoService.class.getName());
         parameters.put("registry", "zookeeper");
@@ -255,7 +253,12 @@ public class RegistryProtocolTest {
         Registry registry = mock(Registry.class);
 
         RegistryProtocol registryProtocol = new RegistryProtocol();
-        registryProtocol.setRegistryFactory(registryFactory);
+        ApplicationModel applicationModel = Mockito.spy(ApplicationModel.defaultModel());
+        applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig("application1"));
+        ExtensionLoader<RegistryFactory> extensionLoaderMock = mock(ExtensionLoader.class);
+        Mockito.when(applicationModel.getExtensionLoader(RegistryFactory.class)).thenReturn(extensionLoaderMock);
+        Mockito.when(extensionLoaderMock.getAdaptiveExtension()).thenReturn(registryFactory);
+        url = url.setScopeModel(applicationModel);
 
         when(registryFactory.getRegistry(registryProtocol.getRegistryUrl(url))).thenReturn(registry);
 
@@ -265,8 +268,6 @@ public class RegistryProtocolTest {
         Assertions.assertTrue(((MigrationInvoker<?>) invoker).getCluster() instanceof MockClusterWrapper);
         Assertions.assertTrue(
             ((MockClusterWrapper) ((MigrationInvoker<?>) invoker).getCluster()).getCluster() instanceof FailoverCluster);
-
-        applicationModelMockedStatic.closeOnDemand();
     }
 
     /**
@@ -292,10 +293,6 @@ public class RegistryProtocolTest {
         when(environment.getConfiguration()).thenReturn(compositeConfiguration);
         when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
 
-        MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
-        applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
-        applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
         Map<String, String> parameters = new HashMap<>();
         parameters.put(INTERFACE_KEY, DemoService.class.getName());
         parameters.put("registry", "zookeeper");
@@ -317,7 +314,12 @@ public class RegistryProtocolTest {
         Registry registry = mock(Registry.class);
 
         RegistryProtocol registryProtocol = new RegistryProtocol();
-        registryProtocol.setRegistryFactory(registryFactory);
+        ApplicationModel applicationModel = Mockito.spy(ApplicationModel.defaultModel());
+        applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig("application1"));
+        ExtensionLoader<RegistryFactory> extensionLoaderMock = mock(ExtensionLoader.class);
+        Mockito.when(applicationModel.getExtensionLoader(RegistryFactory.class)).thenReturn(extensionLoaderMock);
+        Mockito.when(extensionLoaderMock.getAdaptiveExtension()).thenReturn(registryFactory);
+        url = url.setScopeModel(applicationModel);
 
         when(registryFactory.getRegistry(registryProtocol.getRegistryUrl(url))).thenReturn(registry);
 
@@ -330,7 +332,6 @@ public class RegistryProtocolTest {
         Assertions.assertTrue(
             ((MockClusterWrapper) ((MigrationInvoker<?>) invoker).getCluster()).getCluster() instanceof MergeableCluster);
 
-        applicationModelMockedStatic.closeOnDemand();
     }
 
     /**
@@ -356,10 +357,6 @@ public class RegistryProtocolTest {
         when(environment.getConfiguration()).thenReturn(compositeConfiguration);
         when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
 
-        MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
-        applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
-        applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
         Map<String, String> parameters = new HashMap<>();
         parameters.put(INTERFACE_KEY, DemoService.class.getName());
         parameters.put("registry", "zookeeper");
@@ -377,7 +374,6 @@ public class RegistryProtocolTest {
         attributes.put(REFER_KEY, refer);
         URL url = serviceConfigURL.addAttributes(attributes);
 
-        RegistryProtocol registryProtocol = new RegistryProtocol();
         MigrationInvoker<?> clusterInvoker = mock(MigrationInvoker.class);
 
         Map<String, Object> consumerAttribute = new HashMap<>(url.getAttributes());
@@ -393,19 +389,18 @@ public class RegistryProtocolTest {
         MigrationRuleListener migrationRuleListener = mock(MigrationRuleListener.class);
         List<RegistryProtocolListener> registryProtocolListeners = new ArrayList<>();
         registryProtocolListeners.add(migrationRuleListener);
-        MockedStatic<ExtensionLoader> extensionLoaderMockedStatic = mockStatic(ExtensionLoader.class);
-        ExtensionLoader extensionLoaderForRegistryProtocolListener = mock(ExtensionLoader.class);
-        when(ExtensionLoader.getExtensionLoader(RegistryProtocolListener.class))
-            .thenReturn(extensionLoaderForRegistryProtocolListener);
-        when(extensionLoaderForRegistryProtocolListener.getActivateExtension(url, "registry.protocol.listener"))
+
+        RegistryProtocol registryProtocol = new RegistryProtocol();
+        ApplicationModel applicationModel = Mockito.spy(ApplicationModel.defaultModel());
+        applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig("application1"));
+        ExtensionLoader<RegistryProtocolListener> extensionLoaderMock = mock(ExtensionLoader.class);
+        Mockito.when(applicationModel.getExtensionLoader(RegistryProtocolListener.class)).thenReturn(extensionLoaderMock);
+        Mockito.when(extensionLoaderMock.getActivateExtension(url, "registry.protocol.listener"))
             .thenReturn(registryProtocolListeners);
+        url = url.setScopeModel(applicationModel);
 
         registryProtocol.interceptInvoker(clusterInvoker, url, consumerUrl, url);
         verify(migrationRuleListener, times(1)).onRefer(registryProtocol, clusterInvoker, consumerUrl, url);
-
-        extensionLoaderMockedStatic.closeOnDemand();
-        applicationModelMockedStatic.closeOnDemand();
-
     }
 
 
@@ -433,10 +428,6 @@ public class RegistryProtocolTest {
         when(environment.getConfiguration()).thenReturn(compositeConfiguration);
         when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
 
-        MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
-        applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
-        applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
         Map<String, String> parameters = new HashMap<>();
         parameters.put(INTERFACE_KEY, DemoService.class.getName());
         parameters.put("registry", "zookeeper");
@@ -472,7 +463,6 @@ public class RegistryProtocolTest {
         registryProtocol.interceptInvoker(clusterInvoker, url, consumerUrl, url);
 
         Assertions.assertEquals(1, CountRegistryProtocolListener.getReferCounter().get());
-        applicationModelMockedStatic.closeOnDemand();
     }
 
     /**
@@ -496,10 +486,6 @@ public class RegistryProtocolTest {
         when(environment.getConfiguration()).thenReturn(compositeConfiguration);
         when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
 
-        MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
-        applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
-        applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
         Map<String, String> parameters = new HashMap<>();
         parameters.put(INTERFACE_KEY, DemoService.class.getName());
         parameters.put("registry", "zookeeper");
@@ -520,8 +506,14 @@ public class RegistryProtocolTest {
         RegistryFactory registryFactory = mock(RegistryFactory.class);
         Registry registry = mock(Registry.class);
 
+        ApplicationModel applicationModel = Mockito.spy(ApplicationModel.defaultModel());
+        applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig("application1"));
+        ExtensionLoader<RegistryFactory> extensionLoaderMock = mock(ExtensionLoader.class);
+        Mockito.when(applicationModel.getExtensionLoader(RegistryFactory.class)).thenReturn(extensionLoaderMock);
+        Mockito.when(extensionLoaderMock.getAdaptiveExtension()).thenReturn(registryFactory);
+        url = url.setScopeModel(applicationModel);
+
         RegistryProtocol registryProtocol = new RegistryProtocol();
-        registryProtocol.setRegistryFactory(registryFactory);
 
         when(registryFactory.getRegistry(registryProtocol.getRegistryUrl(url))).thenReturn(registry);
 
@@ -543,8 +535,6 @@ public class RegistryProtocolTest {
             String.valueOf(false));
 
         verify(registry,times(1)).register(registeredConsumerUrl);
-
-        applicationModelMockedStatic.closeOnDemand();
     }
 
 }
diff --git a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
index 2c3ea35..75d1eb8 100644
--- a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
+++ b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
@@ -17,8 +17,6 @@
 
 package org.apache.dubbo.rpc.protocol.grpc;
 
-import com.google.common.util.concurrent.ListenableFuture;
-import io.grpc.stub.StreamObserver;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.utils.NetUtils;
@@ -35,6 +33,8 @@ import org.apache.dubbo.rpc.protocol.grpc.support.GrpcGreeterImpl;
 import org.apache.dubbo.rpc.protocol.grpc.support.HelloReply;
 import org.apache.dubbo.rpc.protocol.grpc.support.HelloRequest;
 
+import com.google.common.util.concurrent.ListenableFuture;
+import io.grpc.stub.StreamObserver;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 

[dubbo] 01/02: Merge branch 'apache-3.0' into 3.0-multi-instances

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git

commit ffaa0072699c0c49bdf86110bd6bdb4eda919a64
Merge: ccdc691 b8de0a7
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Thu Sep 2 15:46:34 2021 +0800

    Merge branch 'apache-3.0' into 3.0-multi-instances
    
    # Conflicts:
    #	dubbo-common/src/main/java/org/apache/dubbo/common/URLBuilder.java
    #	dubbo-common/src/main/java/org/apache/dubbo/common/url/component/ServiceConfigURL.java
    #	dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
    #	dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java
    #	dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
    #	dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java

 .../org/apache/dubbo/rpc/cluster/RouterChain.java  |  14 +-
 .../cluster/support/wrapper/AbstractCluster.java   |   4 +
 .../support/wrapper/MockClusterWrapper.java        |   5 +-
 .../apache/dubbo/rpc/cluster/RouterChainTest.java  |  52 ++
 .../support/wrapper/AbstractClusterTest.java       | 106 ++++
 .../support/wrapper/DemoClusterFilter.java}        |  27 +-
 ...g.apache.dubbo.rpc.cluster.filter.ClusterFilter |   1 +
 dubbo-common/pom.xml                               |  14 +
 .../java/org/apache/dubbo/common/URLBuilder.java   |  17 +
 .../url/component/DubboServiceAddressURL.java      |   1 +
 .../common/url/component/ServiceConfigURL.java     |   2 +
 .../apache/dubbo/rpc/model/MethodDescriptor.java   | 166 ++++++-
 .../apache/dubbo/descriptor/DescriptorService.java |  65 +++
 .../dubbo/descriptor/MethodDescriptorTest.java     | 157 +++++-
 .../org/apache/dubbo/config/ReferenceConfig.java   |   5 +-
 .../org/apache/dubbo/config/ServiceConfig.java     |  12 +-
 .../apache/dubbo/config/ReferenceConfigTest.java   | 179 ++++++-
 ...gistryCenterExportMetadataExporterListener.java |  32 +-
 ...egistryCenterExportMetadataIntegrationTest.java | 207 ++++++++
 ...ultipleRegistryCenterExportMetadataService.java |  11 +-
 ...pleRegistryCenterExportMetadataServiceImpl.java |  14 +-
 ...egistryCenterExportMetadataServiceListener.java |  29 +-
 .../org.apache.dubbo.config.ServiceListener        |   1 +
 .../services/org.apache.dubbo.rpc.ExporterListener |   1 +
 .../registrycenter/AbstractRegistryCenter.java     |   4 +-
 .../java/org/apache/dubbo/demo/TripleService.java  |   6 +-
 .../dubbo-demo-xml/dubbo-demo-xml-consumer/pom.xml |   4 +
 .../apache/dubbo/demo/consumer/Application.java    |  17 +
 .../src/main/resources/spring/dubbo-consumer.xml   |   3 +
 .../dubbo-demo-xml/dubbo-demo-xml-provider/pom.xml |   4 +
 .../dubbo/demo/provider/TripleServiceImpl.java     |  11 +-
 .../src/main/resources/spring/dubbo-provider.xml   |   4 +
 .../dubbo/registry/client/InstanceAddressURL.java  |   2 +
 .../registry/client/ServiceDiscoveryRegistry.java  |   6 +-
 .../client/ServiceDiscoveryRegistryDirectory.java  |  17 +-
 .../client/migration/MigrationInvoker.java         |   8 +
 .../registry/integration/DynamicDirectory.java     |  75 ++-
 .../InterfaceCompatibleRegistryProtocol.java       |   1 +
 .../registry/integration/RegistryDirectory.java    |  21 +-
 .../registry/integration/RegistryProtocol.java     |  18 +-
 ...est.java => CacheableFallbackRegistryTest.java} |  31 +-
 .../registry/ListenerRegistryWrapperTest.java      |  84 ++++
 .../dubbo/registry/RegistryFactoryWrapperTest.java |   2 +-
 .../dubbo/registry/RegistryServiceListener1.java   |   2 +-
 .../dubbo/registry/RegistryServiceListener2.java   |   2 +-
 .../client/migration/MigrationRuleHandlerTest.java |   2 +-
 .../CountRegistryProtocolListener.java}            |  31 +-
 .../DemoService.java}                              |   4 +-
 .../registry/integration/DynamicDirectoryTest.java | 173 +++++++
 .../registry/integration/RegistryProtocolTest.java | 550 +++++++++++++++++++++
 ...o.registry.integration.RegistryProtocolListener |   1 +
 .../dubbo/rpc/protocol/grpc/GrpcProtocolTest.java  |  22 +
 .../protocol/grpc/support/DubboGreeterGrpc.java    |   3 +-
 dubbo-rpc/dubbo-rpc-triple/pom.xml                 |  10 +
 .../dubbo/rpc/protocol/tri/AbstractStream.java     |  58 +--
 .../dubbo/rpc/protocol/tri/ExceptionUtils.java     |   8 +-
 .../apache/dubbo/rpc/protocol/tri/GrpcStatus.java  |   9 +-
 .../rpc/protocol/tri/ServerTransportObserver.java  |   4 +-
 .../dubbo/rpc/protocol/tri/TripleHeaderEnum.java   |   3 +-
 .../dubbo/rpc/protocol/tri/TripleProtocol.java     |  11 +
 .../dubbo/rpc/protocol/tri/UnaryClientStream.java  |  60 +--
 .../protocol/tri/service/HealthStatusManager.java  |  74 +++
 .../protocol/tri/service/TriBuiltinService.java    |  86 ++++
 .../rpc/protocol/tri/service/TriHealthImpl.java    | 145 ++++++
 .../dubbo-rpc-triple/src/main/proto/health.proto   |  66 +++
 .../dubbo/rpc/protocol/tri/TripleProtocolTest.java |  21 +-
 .../dubbo/rpc/protocol/tri/support/IGreeter.java   |  11 +
 .../rpc/protocol/tri/support/IGreeterImpl.java     |   9 +
 pom.xml                                            |   1 +
 69 files changed, 2520 insertions(+), 286 deletions(-)

diff --cc dubbo-common/src/main/java/org/apache/dubbo/common/URLBuilder.java
index 24ea293,83a2dab..21e114f
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/URLBuilder.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/URLBuilder.java
@@@ -205,11 -207,6 +210,12 @@@ public final class URLBuilder extends S
      }
  
      @Override
 +    public URLBuilder setScopeModel(ScopeModel scopeModel) {
 +        this.attributes.put(SCOPE_MODEL, scopeModel);
 +        return this;
 +    }
 +
++    @Override
      public URLBuilder addParameterAndEncoded(String key, String value) {
          if (StringUtils.isEmpty(value)) {
              return this;
diff --cc dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
index f8214ef,9f13ce3..ed45fda
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
@@@ -27,7 -30,12 +27,11 @@@ import org.apache.dubbo.config.annotati
  import org.apache.dubbo.config.annotation.Reference;
  import org.apache.dubbo.config.api.DemoService;
  import org.apache.dubbo.config.bootstrap.DubboBootstrap;
 -import org.apache.dubbo.config.context.ConfigManager;
  import org.apache.dubbo.config.provider.impl.DemoServiceImpl;
+ 
+ import org.apache.dubbo.metadata.report.MetadataReport;
+ import org.apache.dubbo.metadata.report.MetadataReportInstance;
+ import org.apache.dubbo.registry.client.migration.MigrationInvoker;
  import org.apache.dubbo.rpc.Exporter;
  import org.apache.dubbo.rpc.ProxyFactory;
  import org.apache.dubbo.rpc.listener.ListenerInvokerWrapper;
@@@ -108,11 -123,9 +113,12 @@@ public class ReferenceConfigTest 
          int zkServerPort = NetUtils.getAvailablePort(NetUtils.getRandomPort());
          this.zkServer = new TestingServer(zkServerPort, true);
          this.zkServer.start();
-         this.registryUrl = "zookeeper://localhost:" + zkServerPort;
+         this.zkUrl = "zookeeper://localhost:" + zkServerPort;
+         this.registryUrl = "registry://localhost:" + zkServerPort+"?registry=zookeeper";
 -        ApplicationModel.getConfigManager();
 +
 +        // preload
 +        ReferenceConfig preloadReferenceConfig = new ReferenceConfig();
 +        ApplicationModel.defaultModel().getApplicationConfigManager();
          DubboBootstrap.getInstance();
      }
  
@@@ -473,19 -547,160 +479,162 @@@
          Assertions.assertEquals("value1", url.getParameter("key1"));
          Assertions.assertEquals("value2", url.getParameter("key2"));
  
 +        dubboBootstrap.stop();
++
+         applicationModelMockedStatic.closeOnDemand();
+         metadataReportInstanceMockedStatic.closeOnDemand();
+     }
+ 
 -
+     /**
+      * Verify the configuration of the registry protocol for remote reference
+      */
+     @Test
+     public  void testCreateInvokerForRemoteRefer(){
+ 
+         ReferenceConfig<DemoService> referenceConfig = new ReferenceConfig<>();
+         referenceConfig.setGeneric(Boolean.FALSE.toString());
+         referenceConfig.setProtocol("dubbo");
+         referenceConfig.setInit(true);
+         referenceConfig.setLazy(false);
+         referenceConfig.setInjvm(false);
+ 
+         DubboBootstrap.getInstance()
+             .application("application1")
+             .initialize();
+         referenceConfig.setBootstrap(DubboBootstrap.getInstance());
+ 
+         ApplicationConfig applicationConfig = new ApplicationConfig();
+         applicationConfig.setName("application1");
+         Map<String, String> parameters = new HashMap<>();
+         parameters.put("key1", "value1");
+         parameters.put("key2", "value2");
+         applicationConfig.setParameters(parameters);
+ 
+         ConfigManager configManager = mock(ConfigManager.class);
+         Environment environment = mock(Environment.class);
+         CompositeConfiguration compositeConfiguration = mock(CompositeConfiguration.class);
+         Configuration dynamicGlobalConfiguration = mock(Configuration.class);
+         ServiceRepository serviceRepository = mock(ServiceRepository.class);
+         ConsumerModel consumerModel = mock(ConsumerModel.class);
+ 
+         when(configManager.getApplicationOrElseThrow()).thenReturn(applicationConfig);
+ 
+         MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
+         applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
+         applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
+         applicationModelMockedStatic.when(ApplicationModel::getServiceRepository).thenReturn(serviceRepository);
+         when(environment.getConfiguration()).thenReturn(compositeConfiguration);
+         when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
+         when(compositeConfiguration.convert(Boolean.class, ENABLE_CONFIGURATION_LISTEN, true))
+             .thenReturn(true);
+ 
+         MockedStatic<MetadataReportInstance> metadataReportInstanceMockedStatic =
+             Mockito.mockStatic(MetadataReportInstance.class);
+ 
+         MetadataReport metadataReport = mock(MetadataReport.class);
+         metadataReportInstanceMockedStatic.when(() -> MetadataReportInstance.getMetadataReport("default"))
+             .thenReturn(metadataReport);
+ 
+ 
+         when(serviceRepository.lookupReferredService("org.apache.dubbo.config.api.DemoService"))
+             .thenReturn(consumerModel);
+ 
+         referenceConfig.refreshed.set(true);
+         referenceConfig.setInterface(DemoService.class);
+         referenceConfig.getInterfaceClass();
+         referenceConfig.setCheck(false);
+         RegistryConfig registry = new RegistryConfig();
+         registry.setAddress(zkUrl);
+         applicationConfig.setRegistries(Collections.singletonList(registry));
+         applicationConfig.setRegistryIds(registry.getId());
+ 
+         referenceConfig.setRegistry(registry);
+ 
+         referenceConfig.init();
+         Assertions.assertTrue(referenceConfig.getInvoker() instanceof MigrationInvoker);
+ 
+         applicationModelMockedStatic.closeOnDemand();
+         metadataReportInstanceMockedStatic.closeOnDemand();
      }
  
+     /**
+      * Verify that the registry url is directly configured for remote reference
+      */
+     @Test
+     public  void testCreateInvokerWithRegistryUrlForRemoteRefer(){
+ 
+         ReferenceConfig<DemoService> referenceConfig = new ReferenceConfig<>();
+         referenceConfig.setGeneric(Boolean.FALSE.toString());
+         referenceConfig.setProtocol("dubbo");
+         referenceConfig.setInit(true);
+         referenceConfig.setLazy(false);
+         referenceConfig.setInjvm(false);
+ 
+         DubboBootstrap.getInstance()
+             .application("application1")
+             .initialize();
+         referenceConfig.setBootstrap(DubboBootstrap.getInstance());
+ 
+         ApplicationConfig applicationConfig = new ApplicationConfig();
+         applicationConfig.setName("application1");
+         Map<String, String> parameters = new HashMap<>();
+         parameters.put("key1", "value1");
+         parameters.put("key2", "value2");
+         applicationConfig.setParameters(parameters);
+ 
+         ConfigManager configManager = mock(ConfigManager.class);
+         Environment environment = mock(Environment.class);
+         CompositeConfiguration compositeConfiguration = mock(CompositeConfiguration.class);
+         Configuration dynamicGlobalConfiguration = mock(Configuration.class);
+         ServiceRepository serviceRepository = mock(ServiceRepository.class);
+         ConsumerModel consumerModel = mock(ConsumerModel.class);
+ 
+         when(configManager.getApplicationOrElseThrow()).thenReturn(applicationConfig);
+ 
+         MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
+         applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
+         applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
+         applicationModelMockedStatic.when(ApplicationModel::getServiceRepository).thenReturn(serviceRepository);
+         when(environment.getConfiguration()).thenReturn(compositeConfiguration);
+         when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
+         when(compositeConfiguration.convert(Boolean.class, ENABLE_CONFIGURATION_LISTEN, true))
+             .thenReturn(true);
+ 
+         MockedStatic<MetadataReportInstance> metadataReportInstanceMockedStatic =
+             Mockito.mockStatic(MetadataReportInstance.class);
+ 
+         MetadataReport metadataReport = mock(MetadataReport.class);
+         metadataReportInstanceMockedStatic.when(() -> MetadataReportInstance.getMetadataReport("default"))
+             .thenReturn(metadataReport);
+ 
+ 
+         when(serviceRepository.lookupReferredService("org.apache.dubbo.config.api.DemoService"))
+             .thenReturn(consumerModel);
+ 
+         referenceConfig.refreshed.set(true);
+         referenceConfig.setInterface(DemoService.class);
+         referenceConfig.getInterfaceClass();
+         referenceConfig.setCheck(false);
+ 
+         referenceConfig.setUrl(registryUrl);
+         referenceConfig.init();
+         Assertions.assertTrue(referenceConfig.getInvoker() instanceof MigrationInvoker);
+ 
+         applicationModelMockedStatic.closeOnDemand();
+         metadataReportInstanceMockedStatic.closeOnDemand();
+     }
+ 
++
      @Test
      @Disabled("Disabled due to Github Actions environment")
      public void testInjvm() throws Exception {
          ApplicationConfig application = new ApplicationConfig();
          application.setName("test-protocol-random-port");
          application.setEnableFileCache(false);
 -        ApplicationModel.getConfigManager().setApplication(application);
 +        ApplicationModel.defaultModel().getApplicationConfigManager().setApplication(application);
  
          RegistryConfig registry = new RegistryConfig();
-         registry.setAddress(registryUrl);
+         registry.setAddress(zkUrl);
  
          ProtocolConfig protocol = new ProtocolConfig();
          protocol.setName("dubbo");
@@@ -526,10 -741,10 +675,10 @@@
          ApplicationConfig application = new ApplicationConfig();
          application.setName("test-reference-retry");
          application.setEnableFileCache(false);
 -        ApplicationModel.getConfigManager().setApplication(application);
 +        ApplicationModel.defaultModel().getApplicationConfigManager().setApplication(application);
  
          RegistryConfig registry = new RegistryConfig();
-         registry.setAddress(registryUrl);
+         registry.setAddress(zkUrl);
          ProtocolConfig protocol = new ProtocolConfig();
          protocol.setName("injvm");
  
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java
index 108292a,5792693..6e12519
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java
@@@ -55,15 -54,17 +55,18 @@@ import static org.apache.dubbo.rpc.mode
  public class ServiceDiscoveryRegistryDirectory<T> extends DynamicDirectory<T> {
      private static final Logger logger = LoggerFactory.getLogger(ServiceDiscoveryRegistryDirectory.class);
  
-     // instance address to invoker mapping.
-     private volatile Map<String, Invoker<T>> urlInvokerMap; // The initial value is null and the midway may be assigned to null, please use the local variable reference
+     /**
+      * instance address to invoker mapping.
+      * The initial value is null and the midway may be assigned to null, please use the local variable reference
+      */
+     private volatile Map<String, Invoker<T>> urlInvokerMap;
 -    private final static ConsumerConfigurationListener CONSUMER_CONFIGURATION_LISTENER = new ConsumerConfigurationListener();
 +    private final ConsumerConfigurationListener consumerConfigurationListener;
      private volatile ReferenceConfigurationListener referenceConfigurationListener;
      private volatile boolean enableConfigurationListen = true;
-     private volatile List<URL> originalUrls = null; // initial for null
+     private volatile List<URL> originalUrls = null;
      private volatile Map<String, String> overrideQueryMap;
      private volatile Map<String, String> consumerFirstQueryMap;
 +    private final ApplicationModel applicationModel;
  
      public ServiceDiscoveryRegistryDirectory(Class<T> serviceType, URL url) {
          super(serviceType, url);
@@@ -185,8 -180,8 +186,8 @@@
      }
  
      private InstanceAddressURL overrideWithConfigurator(InstanceAddressURL providerUrl) {
-         // override url with configurator from configurator from "app-name.configurators"
+         // override url with configurator from "app-name.configurators"
 -        providerUrl = overrideWithConfigurators(CONSUMER_CONFIGURATION_LISTENER.getConfigurators(), providerUrl);
 +        providerUrl = overrideWithConfigurators(consumerConfigurationListener.getConfigurators(), providerUrl);
  
          // override url with configurator from configurators from "service-name.configurators"
          if (referenceConfigurationListener != null) {
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
index 7797d10,82058af..4fa1f76
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
@@@ -87,15 -86,19 +87,20 @@@ import static org.apache.dubbo.rpc.mode
  public class RegistryDirectory<T> extends DynamicDirectory<T> {
      private static final Logger logger = LoggerFactory.getLogger(RegistryDirectory.class);
  
 -    private static final ConsumerConfigurationListener CONSUMER_CONFIGURATION_LISTENER = new ConsumerConfigurationListener();
 +    private final ConsumerConfigurationListener consumerConfigurationListener;
      private ReferenceConfigurationListener referenceConfigurationListener;
  
-     // Map<url, Invoker> cache service url to invoker mapping.
-     // The initial value is null and the midway may be assigned to null, please use the local variable reference
+     /**
+      * Map<url, Invoker> cache service url to invoker mapping.
+      * The initial value is null and the midway may be assigned to null, please use the local variable reference
+      */
      protected volatile Map<URL, Invoker<T>> urlInvokerMap;
-     // The initial value is null and the midway may be assigned to null, please use the local variable reference
+ 
+     /**
+      * The initial value is null and the midway may be assigned to null, please use the local variable reference
+      */
      protected volatile Set<URL> cachedInvokerUrls;
 +    private final ApplicationModel applicationModel;
  
      public RegistryDirectory(Class<T> serviceType, URL url) {
          super(serviceType, url);
@@@ -411,8 -411,8 +415,8 @@@
          // override url with configurator from "override://" URL for dubbo 2.6 and before
          providerUrl = overrideWithConfigurators(this.configurators, providerUrl);
  
-         // override url with configurator from configurator from "app-name.configurators"
+         // override url with configurator from "app-name.configurators"
 -        providerUrl = overrideWithConfigurators(CONSUMER_CONFIGURATION_LISTENER.getConfigurators(), providerUrl);
 +        providerUrl = overrideWithConfigurators(consumerConfigurationListener.getConfigurators(), providerUrl);
  
          // override url with configurator from configurators from "service-name.configurators"
          if (referenceConfigurationListener != null) {
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
index e687ff7,a4af51b..dea9fd8
--- 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
@@@ -728,9 -694,9 +728,9 @@@ public class RegistryProtocol implement
              //The current, may have been merged many times
              URL currentUrl = exporter.getInvoker().getUrl();
              //Merged with this configuration
-             URL newUrl = getConfigedInvokerUrl(configurators, originUrl);
-             newUrl = getConfigedInvokerUrl(getProviderConfigurationListener(originUrl).getConfigurators(), newUrl);
-             newUrl = getConfigedInvokerUrl(serviceConfigurationListeners.get(originUrl.getServiceKey())
+             URL newUrl = getConfiguredInvokerUrl(configurators, originUrl);
 -            newUrl = getConfiguredInvokerUrl(providerConfigurationListener.getConfigurators(), newUrl);
++            newUrl = getConfiguredInvokerUrl(getProviderConfigurationListener(originUrl).getConfigurators(), newUrl);
+             newUrl = getConfiguredInvokerUrl(serviceConfigurationListeners.get(originUrl.getServiceKey())
                  .getConfigurators(), newUrl);
              if (!currentUrl.equals(newUrl)) {
                  if (newUrl.getParameter(Constants.NEED_REEXPORT, true)) {
diff --cc dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
index 798ed37,d5118d9..2c3ea35
--- a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
+++ b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
@@@ -79,8 -82,28 +81,28 @@@ public class GrpcProtocolTest 
          HelloReply hello = serviceImpl.sayHello(HelloRequest.newBuilder().setName("World").build());
          Assertions.assertEquals("Hello World", hello.getMessage());
  
+         ListenableFuture<HelloReply> future = serviceImpl.sayHelloAsync(HelloRequest.newBuilder().setName("World").build());
+         Assertions.assertEquals("Hello World", future.get().getMessage());
+ 
+         serviceImpl.sayHello(HelloRequest.newBuilder().setName("World").build(), new StreamObserver<HelloReply>() {
+ 
+             @Override
+             public void onNext(HelloReply helloReply) {
+                 Assertions.assertEquals("Hello World", helloReply.getMessage());
+             }
+ 
+             @Override
+             public void onError(Throwable throwable) {
+                 throwable.printStackTrace();
+             }
+ 
+             @Override
+             public void onCompleted() {
+                 System.out.println("onCompleted");
+             }
+         });
          // resource recycle.
 -        ApplicationModel.getServiceRepository().destroy();
 +        ApplicationModel.defaultModel().getApplicationServiceRepository().destroy();
      }
  
      class MockReferenceConfig extends ReferenceConfigBase {
diff --cc dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocolTest.java
index c21e2f2,0db41e3..af49f3e
--- a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocolTest.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocolTest.java
@@@ -55,10 -55,28 +56,28 @@@ public class TripleProtocolTest 
  
          protocol.export(proxy.getInvoker(serviceImpl, IGreeter.class, url));
          serviceImpl = proxy.getProxy(protocol.refer(IGreeter.class, url));
-          Thread.sleep(1000);
+         Thread.sleep(1000);
          Assertions.assertEquals("hello world", serviceImpl.echo("hello world"));
+         // fixme will throw exception
+         // Assertions.assertEquals("hello world", serviceImpl.echoAsync("hello world").get());
+         serviceImpl.serverStream("hello world", new StreamObserver<String>() {
+             @Override
+             public void onNext(String data) {
+                 Assertions.assertEquals("hello world",data);
+             }
+ 
+             @Override
+             public void onError(Throwable throwable) {
+                 throwable.printStackTrace();
+             }
+ 
+             @Override
+             public void onCompleted() {
+                 System.out.println("onCompleted");
+             }
+         });
  
          // resource recycle.
 -        ApplicationModel.getServiceRepository().destroy();
 +        ApplicationModel.defaultModel().getApplicationServiceRepository().destroy();
      }
  }