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/08/21 08:26:04 UTC
[dubbo] branch cloud-native updated: support accepts and preferred
in RegistryConfig
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch cloud-native
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/cloud-native by this push:
new c7d1efd support accepts and preferred in RegistryConfig
new 219666d Merge remote-tracking branch 'origin/cloud-native' into cloud-native
c7d1efd is described below
commit c7d1efd362d58b6844b291fa4c6e2c4b0526346f
Author: ken.lj <ke...@gmail.com>
AuthorDate: Wed Aug 21 16:25:39 2019 +0800
support accepts and preferred in RegistryConfig
---
.../bootstrap/DubboServiceConsumerBootstrap.java | 2 +-
.../support/RegistryAwareClusterInvoker.java | 6 ++--
.../dubbo/common/constants/CommonConstants.java | 2 ++
.../dubbo/common/constants/RegistryConstants.java | 2 ++
.../dubbo/config/builders/RegistryBuilder.java | 41 ++++++++++++++++++++++
.../registry/integration/RegistryDirectory.java | 6 ++--
.../dubbo/registry/support/AbstractRegistry.java | 14 ++++++++
.../dubbo/registry/support/FailbackRegistry.java | 4 +++
8 files changed, 70 insertions(+), 7 deletions(-)
diff --git a/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceConsumerBootstrap.java b/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceConsumerBootstrap.java
index 732ac6f..7804529 100644
--- a/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceConsumerBootstrap.java
+++ b/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceConsumerBootstrap.java
@@ -34,7 +34,7 @@ public class DubboServiceConsumerBootstrap {
.application("dubbo-consumer-demo")
.protocol(builder -> builder.port(20887).name("dubbo"))
// Zookeeper
- .registry("zookeeper", builder -> builder.address("zookeeper://127.0.0.1:2181?registry.type=service&subscribed.services=dubbo-provider-demo"))
+ .registry("zookeeper", builder -> builder.address("zookeeper://127.0.0.1:2181?registry.type=service&subscribed.services=dubbo-provider-demo").preferred(true))
.metadataReport(new MetadataReportConfig("zookeeper://127.0.0.1:2181"))
// Nacos
// .registry("nacos", builder -> builder.address("nacos://127.0.0.1:8848?registry.type=service&subscribed.services=dubbo-provider-demo"))
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/RegistryAwareClusterInvoker.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/RegistryAwareClusterInvoker.java
index 789d850..42fbc8a 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/RegistryAwareClusterInvoker.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/RegistryAwareClusterInvoker.java
@@ -27,7 +27,7 @@ import org.apache.dubbo.rpc.cluster.LoadBalance;
import java.util.List;
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.PREFERRED_KEY;
import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_KEY;
/**
@@ -44,9 +44,9 @@ public class RegistryAwareClusterInvoker<T> extends AbstractClusterInvoker<T> {
@Override
@SuppressWarnings({"unchecked", "rawtypes"})
public Result doInvoke(Invocation invocation, final List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException {
- // First, pick the invoker (XXXClusterInvoker) that comes from the local registry, distinguish by a 'default' key.
+ // First, pick the invoker (XXXClusterInvoker) that comes from the local registry, distinguished by a 'preferred' key.
for (Invoker<T> invoker : invokers) {
- if (invoker.isAvailable() && invoker.getUrl().getParameter(REGISTRY_KEY + "." + DEFAULT_KEY, false)) {
+ if (invoker.isAvailable() && invoker.getUrl().getParameter(REGISTRY_KEY + "." + PREFERRED_KEY, false)) {
return invoker.invoke(invocation);
}
}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
index 517df71..740d519 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
@@ -118,6 +118,8 @@ public interface CommonConstants {
String DEFAULT_KEY = "default";
+ String PREFERRED_KEY = "preferred";
+
/**
* Default timeout value in milliseconds for server shutdown
*/
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegistryConstants.java b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegistryConstants.java
index e7e604c..cd10a11 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegistryConstants.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegistryConstants.java
@@ -88,4 +88,6 @@ public interface RegistryConstants {
* The default request size of service instances
*/
int DEFAULT_INSTANCES_REQUEST_SIZE = 100;
+
+ String ACCEPTS_KEY = "accepts";
}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/RegistryBuilder.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/RegistryBuilder.java
index 9dc9e1b..53decfd 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/RegistryBuilder.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/RegistryBuilder.java
@@ -134,6 +134,23 @@ public class RegistryBuilder extends AbstractBuilder<RegistryConfig, RegistryBui
*/
private String extraKeys;
+ /**
+ * the address work as config center or not
+ */
+ private Boolean useAsConfigCenter;
+
+ /**
+ * the address work as remote metadata center or not
+ */
+ private Boolean useAsMetadataCenter;
+
+ /**
+ * list of rpc protocols accepted by this registry, for example, "dubbo,rest"
+ */
+ private String accepts;
+
+ private Boolean preferred;
+
public static RegistryBuilder newBuilder() {
return new RegistryBuilder();
}
@@ -279,6 +296,26 @@ public class RegistryBuilder extends AbstractBuilder<RegistryConfig, RegistryBui
return getThis();
}
+ public RegistryBuilder useAsConfigCenter(Boolean useAsConfigCenter) {
+ this.useAsConfigCenter = useAsConfigCenter;
+ return getThis();
+ }
+
+ public RegistryBuilder useAsMetadataCenter(Boolean useAsMetadataCenter) {
+ this.useAsMetadataCenter = useAsMetadataCenter;
+ return getThis();
+ }
+
+ public RegistryBuilder preferred(Boolean preferred) {
+ this.preferred = preferred;
+ return getThis();
+ }
+
+ public RegistryBuilder accepts(String accepts) {
+ this.accepts = accepts;
+ return getThis();
+ }
+
public RegistryConfig build() {
RegistryConfig registry = new RegistryConfig();
super.build(registry);
@@ -306,6 +343,10 @@ public class RegistryBuilder extends AbstractBuilder<RegistryConfig, RegistryBui
registry.setUsername(username);
registry.setVersion(version);
registry.setWait(wait);
+ registry.setUseAsConfigCenter(useAsConfigCenter);
+ registry.setUseAsMetadataCenter(useAsMetadataCenter);
+ registry.setAccepts(accepts);
+ registry.setPreferred(preferred);
return registry;
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
index 9592d76..9ddab1b 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
@@ -60,13 +60,13 @@ import java.util.Set;
import java.util.stream.Collectors;
import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE;
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.DISABLED_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_PROTOCOL;
import static org.apache.dubbo.common.constants.CommonConstants.ENABLED_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.MONITOR_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.PREFERRED_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;
import static org.apache.dubbo.common.constants.RegistryConstants.APP_DYNAMIC_CONFIGURATORS_CATEGORY;
import static org.apache.dubbo.common.constants.RegistryConstants.CATEGORY_KEY;
@@ -146,9 +146,9 @@ public class RegistryDirectory<T> extends AbstractDirectory<T> implements Notify
private URL turnRegistryUrlToConsumerUrl(URL url) {
// save any parameter in registry that will be useful to the new url.
- String isDefault = url.getParameter(DEFAULT_KEY);
+ String isDefault = url.getParameter(PREFERRED_KEY);
if (StringUtils.isNotEmpty(isDefault)) {
- queryMap.put(REGISTRY_KEY + "." + DEFAULT_KEY, isDefault);
+ queryMap.put(REGISTRY_KEY + "." + PREFERRED_KEY, isDefault);
}
return URLBuilder.from(url)
.setPath(url.getServiceInterface())
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/AbstractRegistry.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/AbstractRegistry.java
index aec82d5..1fec3ec 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/AbstractRegistry.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/AbstractRegistry.java
@@ -23,6 +23,7 @@ import org.apache.dubbo.common.utils.CollectionUtils;
import org.apache.dubbo.common.utils.ConcurrentHashSet;
import org.apache.dubbo.common.utils.ConfigUtils;
import org.apache.dubbo.common.utils.NamedThreadFactory;
+import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.common.utils.UrlUtils;
import org.apache.dubbo.registry.NotifyListener;
import org.apache.dubbo.registry.Registry;
@@ -36,6 +37,7 @@ import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -53,7 +55,9 @@ import java.util.concurrent.atomic.AtomicReference;
import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE;
import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;
import static org.apache.dubbo.common.constants.CommonConstants.FILE_KEY;
+import static org.apache.dubbo.common.constants.RegistryConstants.ACCEPTS_KEY;
import static org.apache.dubbo.common.constants.RegistryConstants.CATEGORY_KEY;
import static org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_CATEGORY;
import static org.apache.dubbo.common.constants.RegistryConstants.DYNAMIC_KEY;
@@ -490,6 +494,16 @@ public abstract class AbstractRegistry implements Registry {
}
}
+ protected boolean acceptable(URL urlToRegistry) {
+ String pattern = registryUrl.getParameter(ACCEPTS_KEY);
+ if (StringUtils.isEmpty(pattern)) {
+ return true;
+ }
+
+ return Arrays.stream(COMMA_SPLIT_PATTERN.split(pattern))
+ .anyMatch(p -> p.equalsIgnoreCase(urlToRegistry.getProtocol()));
+ }
+
@Override
public String toString() {
return getUrl().toString();
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/FailbackRegistry.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/FailbackRegistry.java
index f4c21b7..25b08f3 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/FailbackRegistry.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/FailbackRegistry.java
@@ -228,6 +228,10 @@ public abstract class FailbackRegistry extends AbstractRegistry {
@Override
public void register(URL url) {
+ if (!acceptable(url)) {
+ logger.info("URL " + url + " will not be registered to Registry. Registry " + url + " does not accept service of this protocol type.");
+ return;
+ }
super.register(url);
removeFailedRegistered(url);
removeFailedUnregistered(url);