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/15 15:35:36 UTC
[dubbo] branch 3.0 updated: Fix DubboProtocol state & Fix NPE when
destroy (#8809)
This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new 726cdd7 Fix DubboProtocol state & Fix NPE when destroy (#8809)
726cdd7 is described below
commit 726cdd74c2cae880da8f7c953f59cc23ee439541
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Wed Sep 15 23:35:20 2021 +0800
Fix DubboProtocol state & Fix NPE when destroy (#8809)
* Fix DubboProtocol state & Fix NPE when destroy
* Fix
---
.../apache/dubbo/rpc/model/ApplicationModel.java | 9 ++++---
.../org/apache/dubbo/rpc/model/FrameworkModel.java | 3 ++-
.../org/apache/dubbo/rpc/model/ModuleModel.java | 7 +++--
.../org/apache/dubbo/rpc/model/ScopeModel.java | 9 ++++---
.../bootstrap/DubboBootstrapMultiInstanceTest.java | 30 ++++++++++++----------
...MultipleRegistryCenterExportProviderFilter.java | 4 +--
.../injvm/MultipleRegistryCenterInjvmFilter.java | 8 ++++--
.../SingleRegistryCenterExportProviderFilter.java | 4 +--
.../injvm/SingleRegistryCenterInjvmFilter.java | 4 +--
.../StandardMetadataServiceURLBuilder.java | 13 +++++-----
.../registry/integration/RegistryProtocol.java | 20 +++++++++------
...dubbo.registry.client.ServiceInstanceCustomizer | 3 ---
.../rpc/protocol/dubbo/CallbackServiceCodec.java | 4 ++-
13 files changed, 69 insertions(+), 49 deletions(-)
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
index cfb3a8d..fab944b 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
@@ -168,7 +168,7 @@ public class ApplicationModel extends ScopeModel {
@Override
protected void initialize() {
super.initialize();
- internalModule = new ModuleModel(this);
+ internalModule = new ModuleModel(this, true);
this.serviceRepository = new ServiceRepository(this);
ExtensionLoader<ApplicationInitListener> extensionLoader = this.getExtensionLoader(ApplicationInitListener.class);
@@ -264,10 +264,13 @@ public class ApplicationModel extends ScopeModel {
return getCurrentConfig().getName();
}
- public synchronized void addModule(ModuleModel moduleModel) {
+ public synchronized void addModule(ModuleModel moduleModel, boolean isInternal) {
if (!this.moduleModels.contains(moduleModel)) {
this.moduleModels.add(moduleModel);
moduleModel.setInternalName(buildInternalName(ModuleModel.NAME, getInternalId(), moduleIndex.getAndIncrement()));
+ if (!isInternal) {
+ pubModuleModels.add(moduleModel);
+ }
}
}
@@ -349,7 +352,7 @@ public class ApplicationModel extends ScopeModel {
@Override
protected boolean checkIfClassLoaderCanRemoved(ClassLoader classLoader) {
- return !containsClassLoader(classLoader);
+ return super.checkIfClassLoaderCanRemoved(classLoader) && !containsClassLoader(classLoader);
}
protected boolean containsClassLoader(ClassLoader classLoader) {
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
index ffbeb3b..6ed1917 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
@@ -140,6 +140,7 @@ public class FrameworkModel extends ScopeModel {
@Override
protected boolean checkIfClassLoaderCanRemoved(ClassLoader classLoader) {
- return applicationModels.stream().noneMatch(applicationModel -> applicationModel.containsClassLoader(classLoader));
+ return super.checkIfClassLoaderCanRemoved(classLoader) &&
+ applicationModels.stream().noneMatch(applicationModel -> applicationModel.containsClassLoader(classLoader));
}
}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
index 56daf48..eb14730 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
@@ -44,12 +44,15 @@ public class ModuleModel extends ScopeModel {
private ModuleServiceRepository serviceRepository;
private ModuleConfigManager moduleConfigManager;
-
public ModuleModel(ApplicationModel applicationModel) {
+ this(applicationModel, false);
+ }
+
+ public ModuleModel(ApplicationModel applicationModel, boolean isInternal) {
super(applicationModel, ExtensionScope.MODULE);
Assert.notNull(applicationModel, "ApplicationModel can not be null");
this.applicationModel = applicationModel;
- applicationModel.addModule(this);
+ applicationModel.addModule(this, isInternal);
initialize();
Assert.notNull(applicationModel, "ApplicationModel can not be null");
}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
index 6ae533d..145ac58 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
@@ -21,6 +21,8 @@ import org.apache.dubbo.common.config.Environment;
import org.apache.dubbo.common.extension.ExtensionAccessor;
import org.apache.dubbo.common.extension.ExtensionDirector;
import org.apache.dubbo.common.extension.ExtensionScope;
+import org.apache.dubbo.common.logger.Logger;
+import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.utils.ConcurrentHashSet;
import java.util.Collections;
@@ -33,6 +35,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
public abstract class ScopeModel implements ExtensionAccessor {
+ protected static final Logger LOGGER = LoggerFactory.getLogger(ScopeModel.class);
/**
* The internal name is used to represent the hierarchy of the model tree, such as:
@@ -94,13 +97,13 @@ public abstract class ScopeModel implements ExtensionAccessor {
public void destroy() {
if (destroyed.compareAndSet(false, true)) {
try {
+ onDestroy();
HashSet<ClassLoader> copyOfClassLoaders = new HashSet<>(classLoaders);
for (ClassLoader classLoader : copyOfClassLoaders) {
removeClassLoader(classLoader);
}
- onDestroy();
} catch (Throwable t) {
- t.printStackTrace();
+ LOGGER.error("Error happened when destroying ScopeModel.", t);
}
}
}
@@ -172,7 +175,7 @@ public abstract class ScopeModel implements ExtensionAccessor {
}
protected boolean checkIfClassLoaderCanRemoved(ClassLoader classLoader) {
- return true;
+ return classLoader != null && !classLoader.equals(ScopeModel.class.getClassLoader());
}
public Set<ClassLoader> getClassLoaders() {
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapMultiInstanceTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapMultiInstanceTest.java
index 6fa0d00..76e2df4 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapMultiInstanceTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapMultiInstanceTest.java
@@ -34,22 +34,24 @@ import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.FrameworkModel;
import org.apache.dubbo.rpc.model.FrameworkServiceRepository;
import org.apache.dubbo.rpc.model.ModuleModel;
-import org.junit.jupiter.api.AfterAll;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.List;
+import static org.apache.dubbo.metadata.MetadataConstants.METADATA_PUBLISH_DELAY_KEY;
+
public class DubboBootstrapMultiInstanceTest {
private static ZookeeperSingleRegistryCenter registryCenter;
private static RegistryConfig registryConfig;
- @BeforeAll
- public static void setup() {
+ @BeforeEach
+ public void setup() {
registryCenter = new ZookeeperSingleRegistryCenter(NetUtils.getAvailablePort());
registryCenter.startup();
RegistryCenter.Instance instance = registryCenter.getRegistryCenterInstance().get(0);
@@ -60,15 +62,11 @@ public class DubboBootstrapMultiInstanceTest {
}
- @AfterAll
- public static void teardown() {
- registryCenter.shutdown();
- }
-
@AfterEach
- protected void afterEach() {
+ public void afterEach() {
SysProps.clear();
DubboBootstrap.reset();
+ registryCenter.shutdown();
}
@Test
@@ -93,8 +91,8 @@ public class DubboBootstrapMultiInstanceTest {
DemoService demoServiceFromProvider = dubboBootstrap1.getCache().get(DemoService.class);
Assertions.assertNull(demoServiceFromProvider);
} finally {
- dubboBootstrap1.destroy();
dubboBootstrap2.destroy();
+ dubboBootstrap1.destroy();
}
}
@@ -160,8 +158,9 @@ public class DubboBootstrapMultiInstanceTest {
}
@Test
- public void testMultiModuleApplication() {
+ public void testMultiModuleApplication() throws InterruptedException {
+ SysProps.setProperty(METADATA_PUBLISH_DELAY_KEY, "1");
String version1 = "1.0";
String version2 = "2.0";
String version3 = "3.0";
@@ -212,6 +211,7 @@ public class DubboBootstrapMultiInstanceTest {
providerBootstrap.start();
+ Thread.sleep(100);
// consumer app
consumerBootstrap = DubboBootstrap.newInstance();
@@ -230,10 +230,12 @@ public class DubboBootstrapMultiInstanceTest {
consumerBootstrap.start();
DemoService referProxy1 = consumerBootstrap.getCache().get(DemoService.class.getName() + ":" + version1);
- referProxy1.sayName("dubbo");
+ Assertions.assertEquals("say:dubbo", referProxy1.sayName("dubbo"));
DemoService referProxy2 = consumerBootstrap.getCache().get(DemoService.class.getName() + ":" + version2);
- referProxy2.sayName("dubbo");
+ Assertions.assertEquals("say:dubbo", referProxy2.sayName("dubbo"));
+
+ Assertions.assertNotEquals(referProxy1, referProxy2);
} finally {
if (providerBootstrap != null) {
providerBootstrap.destroy();
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderFilter.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderFilter.java
index dcb7bcd..0457238 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderFilter.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderFilter.java
@@ -21,8 +21,8 @@ import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
-import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.Result;
+import org.apache.dubbo.rpc.RpcException;
@Activate(group = CommonConstants.PROVIDER, order = 10001)
public class MultipleRegistryCenterExportProviderFilter implements Filter,Filter.Listener {
@@ -55,7 +55,7 @@ public class MultipleRegistryCenterExportProviderFilter implements Filter,Filter
@Override
public void onResponse(Result appResponse, Invoker<?> invoker, Invocation invocation) {
- response = appResponse.getValue().toString();
+ response = String.valueOf(appResponse.getValue());
}
@Override
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/injvm/MultipleRegistryCenterInjvmFilter.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/injvm/MultipleRegistryCenterInjvmFilter.java
index 658924d..679ff83 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/injvm/MultipleRegistryCenterInjvmFilter.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/injvm/MultipleRegistryCenterInjvmFilter.java
@@ -18,7 +18,11 @@ package org.apache.dubbo.integration.multiple.injvm;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
-import org.apache.dubbo.rpc.*;
+import org.apache.dubbo.rpc.Filter;
+import org.apache.dubbo.rpc.Invocation;
+import org.apache.dubbo.rpc.Invoker;
+import org.apache.dubbo.rpc.Result;
+import org.apache.dubbo.rpc.RpcException;
@Activate(group = CommonConstants.PROVIDER, order = 10200)
public class MultipleRegistryCenterInjvmFilter implements Filter,Filter.Listener{
@@ -51,7 +55,7 @@ public class MultipleRegistryCenterInjvmFilter implements Filter,Filter.Listener
@Override
public void onResponse(Result appResponse, Invoker<?> invoker, Invocation invocation) {
- response = appResponse.getValue().toString();
+ response = String.valueOf(appResponse.getValue());
}
@Override
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/exportprovider/SingleRegistryCenterExportProviderFilter.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/exportprovider/SingleRegistryCenterExportProviderFilter.java
index 79cbc93..26bbcda 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/exportprovider/SingleRegistryCenterExportProviderFilter.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/exportprovider/SingleRegistryCenterExportProviderFilter.java
@@ -21,8 +21,8 @@ import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
-import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.Result;
+import org.apache.dubbo.rpc.RpcException;
@Activate(group = CommonConstants.PROVIDER, order = 10000)
public class SingleRegistryCenterExportProviderFilter implements Filter,Filter.Listener {
@@ -55,7 +55,7 @@ public class SingleRegistryCenterExportProviderFilter implements Filter,Filter.L
@Override
public void onResponse(Result appResponse, Invoker<?> invoker, Invocation invocation) {
- response = appResponse.getValue().toString();
+ response = String.valueOf(appResponse.getValue());
}
@Override
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/injvm/SingleRegistryCenterInjvmFilter.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/injvm/SingleRegistryCenterInjvmFilter.java
index a27a7b9..6580b7e 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/injvm/SingleRegistryCenterInjvmFilter.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/injvm/SingleRegistryCenterInjvmFilter.java
@@ -21,8 +21,8 @@ import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
-import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.Result;
+import org.apache.dubbo.rpc.RpcException;
@Activate(group = CommonConstants.PROVIDER, order = 10000)
public class SingleRegistryCenterInjvmFilter implements Filter,Filter.Listener {
@@ -55,7 +55,7 @@ public class SingleRegistryCenterInjvmFilter implements Filter,Filter.Listener {
@Override
public void onResponse(Result appResponse, Invoker<?> invoker, Invocation invocation) {
- response = appResponse.getValue().toString();
+ response = String.valueOf(appResponse.getValue());
}
@Override
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
index e407124..e895a1d 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
@@ -27,7 +27,7 @@ import org.apache.dubbo.remoting.Constants;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ScopeModelAware;
-import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -72,20 +72,21 @@ public class StandardMetadataServiceURLBuilder implements MetadataServiceURLBuil
public List<URL> build(ServiceInstance serviceInstance) {
Map<String, String> paramsMap = getMetadataServiceURLsParams(serviceInstance);
- List<URL> urls = new ArrayList<>(paramsMap.size());
-
String serviceName = serviceInstance.getServiceName();
String host = serviceInstance.getHost();
+ URL url;
if (paramsMap.isEmpty()) {
// ServiceInstance Metadata is empty. Happened when registry not support metadata write.
- urls.add(generateUrlWithoutMetadata(serviceName, host, serviceInstance.getPort()));
+ url = generateUrlWithoutMetadata(serviceName, host, serviceInstance.getPort());
} else {
- urls.add(generateWithMetadata(serviceName, host, paramsMap));
+ url = generateWithMetadata(serviceName, host, paramsMap);
}
- return urls;
+ url = url.setScopeModel(serviceInstance.getApplicationModel());
+
+ return Collections.singletonList(url);
}
private URL generateWithMetadata(String serviceName, String host, Map<String, String> params) {
diff --git 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
index 7d4767c..dbcd8ac 100644
--- 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
@@ -603,10 +603,12 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
for (ApplicationModel applicationModel : frameworkModel.getApplicationModels()) {
if (applicationModel.getModelEnvironment().getConfiguration().convert(Boolean.class, org.apache.dubbo.registry.Constants.ENABLE_CONFIGURATION_LISTEN, true)) {
- for (ModuleModel moduleModel : applicationModel.getModuleModels()) {
- moduleModel.getExtensionLoader(GovernanceRuleRepository.class).getDefaultExtension()
- .removeListener(applicationModel.getApplicationName() + CONFIGURATORS_SUFFIX,
- getProviderConfigurationListener(moduleModel));
+ for (ModuleModel moduleModel : applicationModel.getPubModuleModels()) {
+ if (moduleModel.getServiceRepository().getExportedServices().size() > 0) {
+ moduleModel.getExtensionLoader(GovernanceRuleRepository.class).getDefaultExtension()
+ .removeListener(applicationModel.getApplicationName() + CONFIGURATORS_SUFFIX,
+ getProviderConfigurationListener(moduleModel));
+ }
}
}
}
@@ -879,10 +881,12 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
registry.unsubscribe(subscribeUrl, listener);
ApplicationModel applicationModel = getApplicationModel(registerUrl.getScopeModel());
if (applicationModel.getModelEnvironment().getConfiguration().convert(Boolean.class, ENABLE_CONFIGURATION_LISTEN, true)) {
- for (ModuleModel moduleModel : applicationModel.getModuleModels()) {
- moduleModel.getExtensionLoader(GovernanceRuleRepository.class).getDefaultExtension()
- .removeListener(subscribeUrl.getServiceKey() + CONFIGURATORS_SUFFIX,
- serviceConfigurationListeners.remove(subscribeUrl.getServiceKey()));
+ for (ModuleModel moduleModel : applicationModel.getPubModuleModels()) {
+ if (moduleModel.getServiceRepository().getExportedServices().size() > 0) {
+ moduleModel.getExtensionLoader(GovernanceRuleRepository.class).getDefaultExtension()
+ .removeListener(subscribeUrl.getServiceKey() + CONFIGURATORS_SUFFIX,
+ serviceConfigurationListeners.remove(subscribeUrl.getServiceKey()));
+ }
}
}
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
index 1f517c8..aa9a685 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
+++ b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
@@ -1,6 +1,3 @@
metadata-url=org.apache.dubbo.registry.client.metadata.MetadataServiceURLParamsMetadataCustomizer
-exported-revision=org.apache.dubbo.registry.client.metadata.ExportedServicesRevisionMetadataCustomizer
-subscribed-revision=org.apache.dubbo.registry.client.metadata.SubscribedServicesRevisionMetadataCustomizer
protocol-ports=org.apache.dubbo.registry.client.metadata.ProtocolPortsMetadataCustomizer
-instance-port=org.apache.dubbo.config.metadata.ServiceInstancePortCustomizer
instance-metadata=org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataCustomizer
diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
index 2eec406..922b181 100644
--- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
+++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
@@ -72,11 +72,13 @@ class CallbackServiceCodec {
private final ProxyFactory proxyFactory;
private final Protocol protocolSPI;
private final FrameworkModel frameworkModel;
+ private final DubboProtocol dubboProtocol;
public CallbackServiceCodec(FrameworkModel frameworkModel) {
this.frameworkModel = frameworkModel;
proxyFactory = frameworkModel.getExtensionLoader(ProxyFactory.class).getAdaptiveExtension();
protocolSPI = frameworkModel.getExtensionLoader(Protocol.class).getExtension(DUBBO_PROTOCOL);
+ dubboProtocol = (DubboProtocol) frameworkModel.getExtensionLoader(Protocol.class).getExtension(DubboProtocol.NAME, false);
}
private static byte isCallBack(URL url, String protocolServiceKey, String methodName, int argIndex) {
@@ -322,7 +324,7 @@ class CallbackServiceCodec {
// need get URL from channel and env when decode
URL url = null;
try {
- url = DubboProtocol.getDubboProtocol().getInvoker(channel, inv).getUrl();
+ url = dubboProtocol.getInvoker(channel, inv).getUrl();
} catch (RemotingException e) {
if (logger.isInfoEnabled()) {
logger.info(e.getMessage(), e);