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 2019/12/19 07:14:36 UTC

[dubbo] 04/04: Fix multi protocol does not work when referencing in ProviderConfig (#5498)

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

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

commit 7e4b2f323cd264bc9f282d06b02e03adb49ed606
Author: ken.lj <ke...@gmail.com>
AuthorDate: Wed Dec 18 11:06:03 2019 +0800

    Fix multi protocol does not work when referencing in ProviderConfig (#5498)
    
    fix #5398
---
 .../src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java  | 3 +++
 .../src/main/java/org/apache/dubbo/config/ServiceConfigBase.java    | 6 ++++++
 .../src/main/java/org/apache/dubbo/config/ServiceConfig.java        | 2 +-
 .../dubbo/config/spring/schema/DubboBeanDefinitionParser.java       | 3 ++-
 4 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java
index 1eac623..3d52969 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java
@@ -136,6 +136,9 @@ public abstract class ReferenceConfigBase<T> extends AbstractReferenceConfig {
             if (monitor == null) {
                 setMonitor(consumer.getMonitor());
             }
+            if (StringUtils.isEmpty(registryIds)) {
+                setRegistryIds(consumer.getRegistryIds());
+            }
         }
         if (module != null) {
             if (registries == null) {
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java
index 5b0c41f..d7ee88b 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java
@@ -217,6 +217,12 @@ public abstract class ServiceConfigBase<T> extends AbstractServiceConfig {
             if (configCenter == null) {
                 setConfigCenter(provider.getConfigCenter());
             }
+            if (StringUtils.isEmpty(registryIds)) {
+                setRegistryIds(provider.getRegistryIds());
+            }
+            if (StringUtils.isEmpty(protocolIds)) {
+                setProtocolIds(provider.getProtocolIds());
+            }
         }
         if (module != null) {
             if (registries == null) {
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 4513437..0a081c5 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -207,7 +207,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
     }
 
     private void checkAndUpdateSubConfigs() {
-        // Use default configs defined explicitly on global scope
+        // Use default configs defined explicitly with global scope
         completeCompoundConfigs();
         checkDefault();
         checkProtocol();
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java
index d2a3e08..9d9280d 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java
@@ -20,6 +20,7 @@ import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.ReflectUtils;
 import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.config.AbstractServiceConfig;
 import org.apache.dubbo.config.ArgumentConfig;
 import org.apache.dubbo.config.ConsumerConfig;
 import org.apache.dubbo.config.MethodConfig;
@@ -176,7 +177,7 @@ public class DubboBeanDefinitionParser implements BeanDefinitionParser {
                                 RegistryConfig registryConfig = new RegistryConfig();
                                 registryConfig.setAddress(RegistryConfig.NO_AVAILABLE);
                                 beanDefinition.getPropertyValues().addPropertyValue(beanProperty, registryConfig);
-                            } else if ("provider".equals(property) || "registry".equals(property) || ("protocol".equals(property) && ServiceBean.class.equals(beanClass))) {
+                            } else if ("provider".equals(property) || "registry".equals(property) || ("protocol".equals(property) && AbstractServiceConfig.class.isAssignableFrom(beanClass))) {
                                 /**
                                  * For 'provider' 'protocol' 'registry', keep literal value (should be id/name) and set the value to 'registryIds' 'providerIds' protocolIds'
                                  * The following process should make sure each id refers to the corresponding instance, here's how to find the instance for different use cases: