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

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


The following commit(s) were added to refs/heads/master by this push:
     new d11f204  fixed injvm export and refer (#3857)
d11f204 is described below

commit d11f204592a3c130c0b86abb22da036b9f81aca1
Author: huaifeng <[email protected]>
AuthorDate: Mon May 6 14:25:31 2019 +0800

    fixed injvm export and refer (#3857)
    
    * fix injvm export and refer
    
    * Add default injvm protocol
    is only injvm protocol don't register
    
    * Multiple protocol registry filter injvm
    
    * isOnlyJvm
---
 .../org/apache/dubbo/config/ReferenceConfig.java   | 25 +++++----
 .../org/apache/dubbo/config/ServiceConfig.java     | 65 ++++++++++++++--------
 2 files changed, 55 insertions(+), 35 deletions(-)

diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index 4c37937..5ecae9c 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -354,19 +354,22 @@ public class ReferenceConfig<T> extends 
AbstractReferenceConfig {
                     }
                 }
             } else { // assemble URL from register center's configuration
-                checkRegistry();
-                List<URL> us = loadRegistries(false);
-                if (CollectionUtils.isNotEmpty(us)) {
-                    for (URL u : us) {
-                        URL monitorUrl = loadMonitor(u);
-                        if (monitorUrl != null) {
-                            map.put(Constants.MONITOR_KEY, 
URL.encode(monitorUrl.toFullString()));
+                // if protocols not injvm checkRegistry
+                if (!Constants.LOCAL_PROTOCOL.equalsIgnoreCase(getProtocol())){
+                    checkRegistry();
+                    List<URL> us = loadRegistries(false);
+                    if (CollectionUtils.isNotEmpty(us)) {
+                        for (URL u : us) {
+                            URL monitorUrl = loadMonitor(u);
+                            if (monitorUrl != null) {
+                                map.put(Constants.MONITOR_KEY, 
URL.encode(monitorUrl.toFullString()));
+                            }
+                            
urls.add(u.addParameterAndEncoded(Constants.REFER_KEY, 
StringUtils.toQueryString(map)));
                         }
-                        urls.add(u.addParameterAndEncoded(Constants.REFER_KEY, 
StringUtils.toQueryString(map)));
                     }
-                }
-                if (urls.isEmpty()) {
-                    throw new IllegalStateException("No such any registry to 
reference " + interfaceName + " on the consumer " + NetUtils.getLocalHost() + " 
use dubbo version " + Version.getVersion() + ", please config <dubbo:registry 
address=\"...\" /> to your spring config.");
+                    if (urls.isEmpty()) {
+                        throw new IllegalStateException("No such any registry 
to reference " + interfaceName + " on the consumer " + NetUtils.getLocalHost() 
+ " use dubbo version " + Version.getVersion() + ", please config 
<dubbo:registry address=\"...\" /> to your spring config.");
+                    }
                 }
             }
 
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 0c38b2f..86c5ed4 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
@@ -269,9 +269,12 @@ public class ServiceConfig<T> extends 
AbstractServiceConfig {
         // Config Center should always being started first.
         startConfigCenter();
         checkDefault();
-        checkApplication();
-        checkRegistry();
         checkProtocol();
+        checkApplication();
+        // if protocol is not injvm checkRegistry
+        if (!isOnlyInJvm()) {
+            checkRegistry();
+        }
         this.refresh();
         checkMetadataReport();
 
@@ -327,6 +330,15 @@ public class ServiceConfig<T> extends 
AbstractServiceConfig {
         checkMock(interfaceClass);
     }
 
+    /**
+     * Determine if it is injvm
+     *
+     * @return
+     */
+    private boolean isOnlyInJvm() {
+        return getProtocols().size() == 1 && 
Constants.LOCAL_PROTOCOL.equalsIgnoreCase(getProtocols().get(0).getName());
+    }
+
     public synchronized void export() {
         checkAndUpdateSubConfigs();
 
@@ -539,11 +551,15 @@ public class ServiceConfig<T> extends 
AbstractServiceConfig {
             }
             // export to remote if the config is not local (export to local 
only when config is local)
             if (!Constants.SCOPE_LOCAL.equalsIgnoreCase(scope)) {
-                if (logger.isInfoEnabled()) {
+                if (!isOnlyInJvm() && logger.isInfoEnabled()) {
                     logger.info("Export dubbo service " + 
interfaceClass.getName() + " to url " + url);
                 }
                 if (CollectionUtils.isNotEmpty(registryURLs)) {
                     for (URL registryURL : registryURLs) {
+                        //if protocol is only injvm ,not register
+                        if 
(Constants.LOCAL_PROTOCOL.equalsIgnoreCase(url.getProtocol())) {
+                            continue;
+                        }
                         url = url.addParameterIfAbsent(Constants.DYNAMIC_KEY, 
registryURL.getParameter(Constants.DYNAMIC_KEY));
                         URL monitorUrl = loadMonitor(registryURL);
                         if (monitorUrl != null) {
@@ -586,18 +602,19 @@ public class ServiceConfig<T> extends 
AbstractServiceConfig {
     }
 
     @SuppressWarnings({"unchecked", "rawtypes"})
+    /**
+     * always export injvm
+     */
     private void exportLocal(URL url) {
-        if (!Constants.LOCAL_PROTOCOL.equalsIgnoreCase(url.getProtocol())) {
-            URL local = URLBuilder.from(url)
-                    .setProtocol(Constants.LOCAL_PROTOCOL)
-                    .setHost(LOCALHOST_VALUE)
-                    .setPort(0)
-                    .build();
-            Exporter<?> exporter = protocol.export(
-                    proxyFactory.getInvoker(ref, (Class) interfaceClass, 
local));
-            exporters.add(exporter);
-            logger.info("Export dubbo service " + interfaceClass.getName() + " 
to local registry");
-        }
+        URL local = URLBuilder.from(url)
+                .setProtocol(Constants.LOCAL_PROTOCOL)
+                .setHost(LOCALHOST_VALUE)
+                .setPort(0)
+                .build();
+        Exporter<?> exporter = protocol.export(
+                proxyFactory.getInvoker(ref, (Class) interfaceClass, local));
+        exporters.add(exporter);
+        logger.info("Export dubbo service " + interfaceClass.getName() + " to 
local registry url : " + local);
     }
 
     private Optional<String> getContextPath(ProtocolConfig protocolConfig) {
@@ -803,7 +820,7 @@ public class ServiceConfig<T> extends AbstractServiceConfig 
{
         if (provider != null) {
             return;
         }
-        setProvider (
+        setProvider(
                 ConfigManager.getInstance()
                         .getDefaultProvider()
                         .orElseGet(() -> {
@@ -834,15 +851,15 @@ public class ServiceConfig<T> extends 
AbstractServiceConfig {
 
         if (StringUtils.isEmpty(protocolIds)) {
             if (CollectionUtils.isEmpty(protocols)) {
-               setProtocols(
-                       ConfigManager.getInstance().getDefaultProtocols()
-                        .filter(CollectionUtils::isNotEmpty)
-                        .orElseGet(() -> {
-                            ProtocolConfig protocolConfig = new 
ProtocolConfig();
-                            protocolConfig.refresh();
-                            return new 
ArrayList<>(Arrays.asList(protocolConfig));
-                        })
-               );
+                setProtocols(
+                        ConfigManager.getInstance().getDefaultProtocols()
+                                .filter(CollectionUtils::isNotEmpty)
+                                .orElseGet(() -> {
+                                    ProtocolConfig protocolConfig = new 
ProtocolConfig();
+                                    protocolConfig.refresh();
+                                    return new 
ArrayList<>(Arrays.asList(protocolConfig));
+                                })
+                );
             }
         } else {
             String[] arr = Constants.COMMA_SPLIT_PATTERN.split(protocolIds);

Reply via email to