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:06 UTC
[dubbo] 01/02: Merge branch 'apache-3.0' into 3.0-multi-instances
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();
}
}