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 <[email protected]> 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; }
