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 2018/09/11 08:17:17 UTC
[incubator-dubbo] branch dev-metadata updated: Support static tag
group in TagRouter
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch dev-metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/dev-metadata by this push:
new 514fd4e Support static tag group in TagRouter
514fd4e is described below
commit 514fd4e647b804315a5afa1c14414103f2281e4b
Author: ken.lj <ke...@gmail.com>
AuthorDate: Tue Sep 11 16:17:04 2018 +0800
Support static tag group in TagRouter
---
.../dubbo/rpc/cluster/router/tag/TagRouter.java | 37 ++++++++++++++++++----
1 file changed, 30 insertions(+), 7 deletions(-)
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
index 8dd11fa..6ec6b31 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
@@ -104,6 +104,17 @@ public class TagRouter extends AbstractRouter implements Comparable<Router>, Con
return url;
}
+ /**
+ * TODO It seems that this router does not need to run at runtime at all, because preRoute already classified each invoker into the right tag.
+ * preRoute will always be executed ignoring the runtime status in rule.
+ *
+ * @param invokers
+ * @param url
+ * @param invocation
+ * @param <T>
+ * @return
+ * @throws RpcException
+ */
@Override
public <T> List<Invoker<T>> route(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException {
if (CollectionUtils.isEmpty(invokers)) {
@@ -113,7 +124,7 @@ public class TagRouter extends AbstractRouter implements Comparable<Router>, Con
checkAndInit(invokers.get(0).getUrl());
if (tagRouterRule == null || !tagRouterRule.isValid() || !tagRouterRule.isEnabled()) {
-
+ // the invokers must have been preRouted by static tag configuration, so this invoker list is just what we want.
return invokers;
}
@@ -173,11 +184,26 @@ public class TagRouter extends AbstractRouter implements Comparable<Router>, Con
checkAndInit(invokers.get(0).getUrl());
- if (tagRouterRule == null || !tagRouterRule.isValid() || !tagRouterRule.isEnabled() || isRuntime()) {
- map.put(TreeNode.FAILOVER_KEY, invokers);
+ // Notice! we don't check runtime status here, because we will always need preRoute to run for the dynamic tag configuration.
+ // So, only default to the static tag configuration when the dynamic configuration is empty.
+ if (tagRouterRule == null || !tagRouterRule.isValid() || !tagRouterRule.isEnabled()) {
+ // We still need to group invokers by static tag configuration
+ invokers.forEach(invoker -> {
+ String tag = invoker.getUrl().getParameter(Constants.TAG_KEY);
+ if (StringUtils.isEmpty(tag)) {
+ tag = TreeNode.FAILOVER_KEY;
+ }
+ List<Invoker<T>> subInvokers = map.computeIfAbsent(tag, t -> new ArrayList<>());
+ subInvokers.add(invoker);
+ });
return map;
}
+ /**
+ * If tag rule can work, then group invokers by,
+ * 1. dynamic tag group
+ * 2. static tag group
+ */
invokers.forEach(invoker -> {
String address = invoker.getUrl().getAddress();
List<String> tags = tagRouterRule.getAddressToTagnames().get(address);
@@ -219,6 +245,7 @@ public class TagRouter extends AbstractRouter implements Comparable<Router>, Con
@Override
public boolean isRuntime() {
return tagRouterRule != null && tagRouterRule.isRuntime();
+// return false;
}
@Override
@@ -235,10 +262,6 @@ public class TagRouter extends AbstractRouter implements Comparable<Router>, Con
return tagRouterRule != null && tagRouterRule.isForce();
}
- public boolean isRuntime(Invocation invocation) {
- return true;
- }
-
private <T> List<Invoker<T>> filterInvoker(List<Invoker<T>> invokers, Predicate<Invoker<T>> predicate) {
return invokers.stream()
.filter(predicate)