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/11/03 05:34:33 UTC

[dubbo] 01/12: refactor online and offline

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 288aa4a417d25fbc936abb09ae17802bc75e9459
Author: cvictory <sh...@gmail.com>
AuthorDate: Thu Oct 10 15:10:48 2019 +0800

    refactor online and offline
---
 .../org/apache/dubbo/common/ServiceDescriptor.java | 94 ++++++++++++++++++++++
 .../src/main/java/org/apache/dubbo/common/URL.java | 10 +--
 .../org/apache/dubbo/qos/command/impl/Offline.java | 23 +++---
 .../org/apache/dubbo/qos/command/impl/Online.java  | 24 +++---
 .../apache/dubbo/rpc/model/ServiceMetadata.java    | 42 ++--------
 5 files changed, 129 insertions(+), 64 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/ServiceDescriptor.java b/dubbo-common/src/main/java/org/apache/dubbo/common/ServiceDescriptor.java
new file mode 100644
index 0000000..c072141
--- /dev/null
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/ServiceDescriptor.java
@@ -0,0 +1,94 @@
+package org.apache.dubbo.common;
+
+import org.apache.dubbo.common.utils.StringUtils;
+
+/**
+ * 2019-10-10
+ */
+public class ServiceDescriptor {
+    public static final char COLON_SEPERATOR = ':';
+
+    protected String serviceKey;
+    protected String serviceInterfaceName;
+    protected String version;
+    protected volatile String group;
+
+    public static String buildServiceKey(String path, String group, String version) {
+        StringBuilder buf = new StringBuilder();
+        if (group != null && group.length() > 0) {
+            buf.append(group).append("/");
+        }
+        buf.append(path);
+        if (version != null && version.length() > 0) {
+            buf.append(":").append(version);
+        }
+        return buf.toString();
+    }
+
+    /**
+     * Format : interface:version:group
+     *
+     * @return
+     */
+    public String getDisplayServiceKey() {
+        StringBuilder serviceNameBuilder = new StringBuilder();
+        serviceNameBuilder.append(serviceInterfaceName);
+        serviceNameBuilder.append(COLON_SEPERATOR).append(version);
+        serviceNameBuilder.append(COLON_SEPERATOR).append(group);
+        return serviceNameBuilder.toString();
+    }
+
+    public static ServiceDescriptor revertDisplayServiceKey(String displayKey) {
+        String[] eles = StringUtils.split(displayKey, COLON_SEPERATOR);
+        if (eles == null || eles.length < 1 || eles.length > 3) {
+            return new ServiceDescriptor();
+        }
+        ServiceDescriptor serviceDescriptor = new ServiceDescriptor();
+        serviceDescriptor.setServiceInterfaceName(eles[0]);
+        if (eles.length > 1) {
+            serviceDescriptor.setVersion(eles[1]);
+        }
+        if (eles.length == 3) {
+            serviceDescriptor.setGroup(eles[2]);
+        }
+
+        return serviceDescriptor;
+    }
+
+    public String getServiceKey() {
+        return serviceKey;
+    }
+
+    public void generateServiceKey() {
+        this.serviceKey = buildServiceKey(serviceInterfaceName, group, version);
+    }
+
+    public void setServiceKey(String serviceKey) {
+        this.serviceKey = serviceKey;
+    }
+
+    public String getServiceInterfaceName() {
+        return serviceInterfaceName;
+    }
+
+    public void setServiceInterfaceName(String serviceInterfaceName) {
+        this.serviceInterfaceName = serviceInterfaceName;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getGroup() {
+        return group;
+    }
+
+    public void setGroup(String group) {
+        this.group = group;
+    }
+
+}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
index 8da1f53..6a34fdd 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
@@ -1294,15 +1294,7 @@ class URL implements Serializable {
     }
 
     public static String buildKey(String path, String group, String version) {
-        StringBuilder buf = new StringBuilder();
-        if (group != null && group.length() > 0) {
-            buf.append(group).append("/");
-        }
-        buf.append(path);
-        if (version != null && version.length() > 0) {
-            buf.append(":").append(version);
-        }
-        return buf.toString();
+        return ServiceDescriptor.buildServiceKey(path, group, version);
     }
 
     public String toServiceStringWithoutResolving() {
diff --git a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Offline.java b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Offline.java
index 79c41f3..c44cc41 100644
--- a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Offline.java
+++ b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Offline.java
@@ -38,7 +38,7 @@ import java.util.Set;
 })
 public class Offline implements BaseCommand {
     private Logger logger = LoggerFactory.getLogger(Offline.class);
-    private RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
+    private static RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
 
     @Override
     public String execute(CommandContext commandContext, String[] args) {
@@ -47,13 +47,23 @@ public class Offline implements BaseCommand {
         if (args != null && args.length > 0) {
             servicePattern = args[0];
         }
-        boolean hasService = false;
+        boolean hasService = offline(servicePattern);
+
+        if (hasService) {
+            return "OK";
+        } else {
+            return "service not found";
+        }
+    }
 
+    public static boolean offline(String servicePattern) {
+        boolean hasService = false;
         Collection<ProviderModel> providerModelList = ApplicationModel.allProviderModels();
         for (ProviderModel providerModel : providerModelList) {
             if (providerModel.getServiceName().matches(servicePattern)) {
                 hasService = true;
-                Set<ProviderInvokerWrapper> providerInvokerWrapperSet = ProviderConsumerRegTable.getProviderInvoker(providerModel.getServiceName());
+                Set<ProviderInvokerWrapper> providerInvokerWrapperSet = ProviderConsumerRegTable
+                        .getProviderInvoker(providerModel.getServiceMetadata().getServiceKey());
                 for (ProviderInvokerWrapper providerInvokerWrapper : providerInvokerWrapperSet) {
                     if (!providerInvokerWrapper.isReg()) {
                         continue;
@@ -64,11 +74,6 @@ public class Offline implements BaseCommand {
                 }
             }
         }
-
-        if (hasService) {
-            return "OK";
-        } else {
-            return "service not found";
-        }
+        return hasService;
     }
 }
diff --git a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Online.java b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Online.java
index 30ba14b..c72098f 100644
--- a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Online.java
+++ b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Online.java
@@ -39,7 +39,7 @@ import java.util.Set;
 })
 public class Online implements BaseCommand {
     private Logger logger = LoggerFactory.getLogger(Online.class);
-    private RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
+    private static RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
 
     @Override
     public String execute(CommandContext commandContext, String[] args) {
@@ -49,13 +49,23 @@ public class Online implements BaseCommand {
             servicePattern = args[0];
         }
 
-        boolean hasService = false;
+        boolean hasService = online(servicePattern);
+
+        if (hasService) {
+            return "OK";
+        } else {
+            return "service not found";
+        }
+
+    }
 
+    public static boolean online(String servicePattern){
+        boolean hasService = false;
         Collection<ProviderModel> providerModelList = ApplicationModel.allProviderModels();
         for (ProviderModel providerModel : providerModelList) {
             if (providerModel.getServiceName().matches(servicePattern)) {
                 hasService = true;
-                Set<ProviderInvokerWrapper> providerInvokerWrapperSet = ProviderConsumerRegTable.getProviderInvoker(providerModel.getServiceName());
+                Set<ProviderInvokerWrapper> providerInvokerWrapperSet = ProviderConsumerRegTable.getProviderInvoker(providerModel.getServiceMetadata().getServiceKey());
                 for (ProviderInvokerWrapper providerInvokerWrapper : providerInvokerWrapperSet) {
                     if (providerInvokerWrapper.isReg()) {
                         continue;
@@ -66,12 +76,6 @@ public class Online implements BaseCommand {
                 }
             }
         }
-
-        if (hasService) {
-            return "OK";
-        } else {
-            return "service not found";
-        }
-
+        return hasService;
     }
 }
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ServiceMetadata.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ServiceMetadata.java
index 5a09f45..0bf34d2 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ServiceMetadata.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ServiceMetadata.java
@@ -16,6 +16,9 @@
  */
 package org.apache.dubbo.rpc.model;
 
+import org.apache.dubbo.common.ServiceDescriptor;
+import org.apache.dubbo.common.URL;
+
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -23,16 +26,11 @@ import java.util.concurrent.ConcurrentHashMap;
  * data related to service level such as name, version, classloader of business service,
  * security info, etc. Also with a AttributeMap for extension.
  */
-public class ServiceMetadata {
+public class ServiceMetadata extends ServiceDescriptor {
 
-    private String serviceKey;
-    private String serviceInterfaceName;
     private String defaultGroup;
-    private String version;
     private Class<?> serviceType;
 
-    private volatile String group;
-
     private Object target;
 
     /* will be transferred to remote side */
@@ -45,7 +43,7 @@ public class ServiceMetadata {
         this.defaultGroup = group;
         this.group = group;
         this.version = version;
-        this.serviceKey = serviceInterfaceName + ":" + version;
+        this.serviceKey = URL.buildKey(serviceInterfaceName, group, version);
         this.serviceType = serviceType;
     }
 
@@ -53,7 +51,7 @@ public class ServiceMetadata {
     }
 
     public String getServiceKey() {
-        return serviceInterfaceName + ":" + version;
+        return serviceKey;
     }
 
     public Map<String, Object> getAttachments() {
@@ -80,46 +78,18 @@ public class ServiceMetadata {
         return serviceType;
     }
 
-    public String getServiceInterfaceName() {
-        return serviceInterfaceName;
-    }
-
     public String getDefaultGroup() {
         return defaultGroup;
     }
 
-    public String getVersion() {
-        return version;
-    }
-
-    public String getGroup() {
-        return group;
-    }
-
-    public void setGroup(String group) {
-        this.group = group;
-    }
-
-    public void setServiceInterfaceName(String serviceInterfaceName) {
-        this.serviceInterfaceName = serviceInterfaceName;
-    }
-
     public void setDefaultGroup(String defaultGroup) {
         this.defaultGroup = defaultGroup;
     }
 
-    public void setVersion(String version) {
-        this.version = version;
-    }
-
     public void setServiceType(Class<?> serviceType) {
         this.serviceType = serviceType;
     }
 
-    public void setServiceKey(String serviceKey) {
-        this.serviceKey = serviceKey;
-    }
-
     public Object getTarget() {
         return target;
     }