You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2020/09/17 09:57:44 UTC

[dubbo] 02/02: Fix service discovery delay subscription

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

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

commit 4808d7bff327513d2a7fcb354d8b367973463d2d
Author: ken.lj <ke...@gmail.com>
AuthorDate: Thu Sep 17 17:56:52 2020 +0800

    Fix service discovery delay subscription
---
 .../src/main/java/org/apache/dubbo/common/config/Environment.java   | 2 +-
 .../src/main/resources/spring/dubbo-consumer.xml                    | 3 +--
 .../org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java  | 1 +
 .../registry/client/migration/ServiceDiscoveryMigrationInvoker.java | 6 +++++-
 4 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
index fea8841..37f5e82 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
@@ -159,7 +159,7 @@ public class Environment extends LifecycleAdapter implements FrameworkExt {
 
     public Configuration getDynamicGlobalConfiguration() {
         if (dynamicGlobalConfiguration == null) {
-            if (dynamicConfiguration != null) {
+            if (dynamicConfiguration == null) {
                 throw new IllegalStateException("Init dynamic configuration before use.");
             }
             dynamicGlobalConfiguration = new CompositeConfiguration();
diff --git a/dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-consumer/src/main/resources/spring/dubbo-consumer.xml b/dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-consumer/src/main/resources/spring/dubbo-consumer.xml
index 5475752..f71fc5f 100644
--- a/dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-consumer/src/main/resources/spring/dubbo-consumer.xml
+++ b/dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-consumer/src/main/resources/spring/dubbo-consumer.xml
@@ -23,12 +23,11 @@
 
     <dubbo:application name="demo-consumer">
         <dubbo:parameter key="mapping-type" value="metadata"/>
-        <dubbo:parameter key="enable-auto-migration" value="true"/>
     </dubbo:application>
 
     <!--    <dubbo:metadata-report address="zookeeper://127.0.0.1:2181"/>-->
 
-    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:registry address="zookeeper://127.0.0.1:2181?registry-type=service"/>
 
     <dubbo:reference id="demoService" check="false"
                      interface="org.apache.dubbo.demo.DemoService"/>
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java
index 5977a8b..1a79ea2 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java
@@ -267,6 +267,7 @@ public class ServiceDiscoveryRegistry implements Registry {
             if (check) {
                 throw new IllegalStateException("Should has at least one way to know which services this interface belongs to, subscription url: " + url);
             }
+            return;
         }
 
         subscribeURLs(url, listener, serviceNames);
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/ServiceDiscoveryMigrationInvoker.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/ServiceDiscoveryMigrationInvoker.java
index 7d2642f..fb9e17e 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/ServiceDiscoveryMigrationInvoker.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/ServiceDiscoveryMigrationInvoker.java
@@ -17,6 +17,8 @@
 package org.apache.dubbo.registry.client.migration;
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.logger.Logger;
+import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.registry.Registry;
 import org.apache.dubbo.registry.integration.RegistryProtocol;
 import org.apache.dubbo.rpc.Invocation;
@@ -26,6 +28,7 @@ import org.apache.dubbo.rpc.cluster.Cluster;
 import org.apache.dubbo.rpc.cluster.ClusterInvoker;
 
 public class ServiceDiscoveryMigrationInvoker<T> extends MigrationInvoker<T> {
+    private static final Logger logger = LoggerFactory.getLogger(ServiceDiscoveryMigrationInvoker.class);
 
     public ServiceDiscoveryMigrationInvoker(RegistryProtocol registryProtocol, Cluster cluster, Registry registry, Class<T> type, URL url, URL consumerUrl) {
         super(registryProtocol, cluster, registry, type, url, consumerUrl);
@@ -38,7 +41,8 @@ public class ServiceDiscoveryMigrationInvoker<T> extends MigrationInvoker<T> {
 
     @Override
     public synchronized void fallbackToInterfaceInvoker() {
-        destroyServiceDiscoveryInvoker(this.getServiceDiscoveryInvoker());
+        logger.error("Service discovery registry type does not support discovery of interface level addresses, " + getRegistryUrl());
+        migrateToServiceDiscoveryInvoker(true);
     }
 
     @Override