This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 2.6.x
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/2.6.x by this push:
new 54e14e9 Merge pull request #3502, apply #3295 to 2.6 branch.
54e14e9 is described below
commit 54e14e905c0d0e3b2921e6897ccb79afc0050fc5
Author: min <[email protected]>
AuthorDate: Tue Feb 19 15:23:41 2019 +0800
Merge pull request #3502, apply #3295 to 2.6 branch.
Fixes #3294, referenceconfig#destroy never invoke unregister.
---
.../registry/integration/RegistryDirectory.java | 20 ++++++++++++++++++++
.../dubbo/registry/integration/RegistryProtocol.java | 13 +++++++++++--
2 files changed, 31 insertions(+), 2 deletions(-)
diff --git
a/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/integration/RegistryDirectory.java
b/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/integration/RegistryDirectory.java
index 68ecc0e..d5ae6b8 100644
---
a/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/integration/RegistryDirectory.java
+++
b/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/integration/RegistryDirectory.java
@@ -78,6 +78,8 @@ public class RegistryDirectory<T> extends
AbstractDirectory<T> implements Notify
private volatile URL overrideDirectoryUrl; // Initialization at
construction time, assertion not null, and always assign non null value
+ private volatile URL registeredConsumerUrl;
+
/**
* override rules
* Priority: override>-D>consumer>provider
@@ -164,6 +166,16 @@ public class RegistryDirectory<T> extends
AbstractDirectory<T> implements Notify
if (isDestroyed()) {
return;
}
+
+ // unregister.
+ try {
+ if (getRegisteredConsumerUrl() != null && registry != null &&
registry.isAvailable()) {
+ registry.unregister(getRegisteredConsumerUrl());
+ }
+ } catch (Throwable t) {
+ logger.warn("unexpected error when unregister service " +
serviceKey + "from registry" + registry.getUrl(), t);
+ }
+
// unsubscribe.
try {
if (getConsumerUrl() != null && registry != null &&
registry.isAvailable()) {
@@ -612,6 +624,14 @@ public class RegistryDirectory<T> extends
AbstractDirectory<T> implements Notify
return this.overrideDirectoryUrl;
}
+ public URL getRegisteredConsumerUrl() {
+ return registeredConsumerUrl;
+ }
+
+ public void setRegisteredConsumerUrl(URL registeredConsumerUrl) {
+ this.registeredConsumerUrl = registeredConsumerUrl;
+ }
+
@Override
public boolean isAvailable() {
if (isDestroyed()) {
diff --git
a/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/integration/RegistryProtocol.java
b/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/integration/RegistryProtocol.java
index e1a59b9..f8bf2a1 100644
---
a/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/integration/RegistryProtocol.java
+++
b/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/integration/RegistryProtocol.java
@@ -51,6 +51,9 @@ import static
com.alibaba.dubbo.common.Constants.ACCEPT_FOREIGN_IP;
import static com.alibaba.dubbo.common.Constants.QOS_ENABLE;
import static com.alibaba.dubbo.common.Constants.QOS_PORT;
import static com.alibaba.dubbo.common.Constants.VALIDATION_KEY;
+import static com.alibaba.dubbo.common.Constants.CATEGORY_KEY;
+import static com.alibaba.dubbo.common.Constants.CONSUMERS_CATEGORY;
+import static com.alibaba.dubbo.common.Constants.CHECK_KEY;
/**
* RegistryProtocol
@@ -300,8 +303,9 @@ public class RegistryProtocol implements Protocol {
URL subscribeUrl = new URL(Constants.CONSUMER_PROTOCOL,
parameters.remove(Constants.REGISTER_IP_KEY), 0, type.getName(), parameters);
if (!Constants.ANY_VALUE.equals(url.getServiceInterface())
&& url.getParameter(Constants.REGISTER_KEY, true)) {
-
registry.register(subscribeUrl.addParameters(Constants.CATEGORY_KEY,
Constants.CONSUMERS_CATEGORY,
- Constants.CHECK_KEY, String.valueOf(false)));
+ URL registeredConsumerUrl = getRegisteredConsumerUrl(subscribeUrl,
url);
+ registry.register(registeredConsumerUrl);
+ directory.setRegisteredConsumerUrl(registeredConsumerUrl);
}
directory.subscribe(subscribeUrl.addParameter(Constants.CATEGORY_KEY,
Constants.PROVIDERS_CATEGORY
@@ -313,6 +317,11 @@ public class RegistryProtocol implements Protocol {
return invoker;
}
+ public URL getRegisteredConsumerUrl(final URL consumerUrl, URL
registryUrl) {
+ return consumerUrl.addParameters(CATEGORY_KEY, CONSUMERS_CATEGORY,
+ CHECK_KEY, String.valueOf(false));
+ }
+
@Override
public void destroy() {
List<Exporter<?>> exporters = new
ArrayList<Exporter<?>>(bounds.values());