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 e16e78f  create AbstractRouter (#2909)
e16e78f is described below

commit e16e78ff18997d595139a6561bea005e043fd568
Author: Leishunyu <[email protected]>
AuthorDate: Fri Dec 7 18:25:18 2018 +0800

    create AbstractRouter (#2909)
    
    * create AbstractRouter
    
    * router default method
    
    * router default method
    
    * router default method
    
    * mockinvoker
---
 .../java/org/apache/dubbo/rpc/cluster/Router.java  | 27 ++++++++++++++++++++++
 .../rpc/cluster/router/MockInvokersSelector.java   |  5 ++++
 .../cluster/router/condition/ConditionRouter.java  | 13 ++++-------
 .../rpc/cluster/router/script/ScriptRouter.java    | 22 +++++++++++++-----
 .../dubbo/rpc/cluster/router/tag/TagRouter.java    | 10 +++-----
 5 files changed, 55 insertions(+), 22 deletions(-)

diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java
index 47aa251..99a46a9 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java
@@ -51,4 +51,31 @@ public interface Router extends Comparable<Router> {
      */
     <T> List<Invoker<T>> route(List<Invoker<T>> invokers, URL url, Invocation 
invocation) throws RpcException;
 
+    /**
+     * priority
+     *
+     * @return
+     */
+    int getPriority();
+
+    /**
+     * compare Router
+     *
+     * @param o
+     * @return
+     */
+    @Override
+    default int compareTo(Router o) {
+        if (o == null) {
+            throw new IllegalArgumentException();
+        }
+        if (this.getPriority() == o.getPriority()) {
+            if (o.getUrl() == null) {
+                return -1;
+            }
+            return 
getUrl().toFullString().compareTo(o.getUrl().toFullString());
+        } else {
+            return getPriority() > o.getPriority() ? 1 : -1;
+        }
+    }
 }
\ No newline at end of file
diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/MockInvokersSelector.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/MockInvokersSelector.java
index 35ce7e5..18133a4 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/MockInvokersSelector.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/MockInvokersSelector.java
@@ -49,6 +49,11 @@ public class MockInvokersSelector implements Router {
         return invokers;
     }
 
+    @Override
+    public int getPriority() {
+        return Integer.MAX_VALUE;
+    }
+
     private <T> List<Invoker<T>> getMockedInvokers(final List<Invoker<T>> 
invokers) {
         if (!hasMockProviders(invokers)) {
             return null;
diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
index f45741e..9b3e527 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
@@ -40,7 +40,6 @@ import java.util.regex.Pattern;
 
 /**
  * ConditionRouter
- *
  */
 public class ConditionRouter implements Router {
 
@@ -178,17 +177,13 @@ public class ConditionRouter implements Router {
     }
 
     @Override
-    public URL getUrl() {
-        return url;
+    public int getPriority() {
+        return priority;
     }
 
     @Override
-    public int compareTo(Router o) {
-        if (o == null || o.getClass() != ConditionRouter.class) {
-            return 1;
-        }
-        ConditionRouter c = (ConditionRouter) o;
-        return this.priority == c.priority ? 
url.toFullString().compareTo(c.url.toFullString()) : (this.priority > 
c.priority ? 1 : -1);
+    public URL getUrl() {
+        return url;
     }
 
     boolean matchWhen(URL url, Invocation invocation) {
diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
index 6164322..7c3070a 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
@@ -40,7 +40,6 @@ import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * ScriptRouter
- *
  */
 public class ScriptRouter implements Router {
 
@@ -115,12 +114,23 @@ public class ScriptRouter implements Router {
     }
 
     @Override
+    public int getPriority() {
+        return priority;
+    }
+
+    @Override
     public int compareTo(Router o) {
-        if (o == null || o.getClass() != ScriptRouter.class) {
-            return 1;
+        if (o == null) {
+            throw new IllegalArgumentException();
+        }
+        if (this.priority == o.getPriority()) {
+            if (o instanceof ScriptRouter) {
+                ScriptRouter c = (ScriptRouter) o;
+                return rule.compareTo(c.rule);
+            }
+            return 0;
+        } else {
+            return this.priority > o.getPriority() ? 1 : -1;
         }
-        ScriptRouter c = (ScriptRouter) o;
-        return this.priority == c.priority ? rule.compareTo(c.rule) : 
(this.priority > c.priority ? 1 : -1);
     }
-
 }
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 4bcb43b..b133cd1 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
@@ -80,7 +80,7 @@ public class TagRouter implements Router {
                         }
                     }
                 }
-            // Normal request
+                // Normal request
             } else {
                 for (Invoker<T> invoker : invokers) {
                     // Can't access tag invoker,only normal invoker should be 
selected
@@ -98,11 +98,7 @@ public class TagRouter implements Router {
     }
 
     @Override
-    public int compareTo(Router o) {
-        if (o == null || o.getClass() != TagRouter.class) {
-            return 1;
-        }
-        TagRouter c = (TagRouter) o;
-        return this.priority == c.priority ? 
url.toFullString().compareTo(c.url.toFullString()) : (this.priority > 
c.priority ? 1 : -1);
+    public int getPriority() {
+        return priority;
     }
 }

Reply via email to