提交 53ff3ab3 编写于 作者: W william.liangf

DUBBO-204 路由支持force参数表示强制行,当为路由结果为空时也返回。

git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@1713 1a56cb94-b969-4eaa-88fa-be21384802f2
上级 e40bd46a
......@@ -45,9 +45,11 @@ public class ConditionRouter implements Router, Comparable<Router> {
private static final Logger logger = LoggerFactory.getLogger(ConditionRouter.class);
private final URL url;
private final int priority;
private final URL url;
private final boolean force;
private final Map<String, MatchPair> whenCondition;
......@@ -56,6 +58,7 @@ public class ConditionRouter implements Router, Comparable<Router> {
public ConditionRouter(URL url) {
this.url = url;
this.priority = url.getParameter(Constants.PRIORITY_KEY, 0);
this.force = url.getParameter(Constants.FORCE_KEY, false);
try {
String rule = url.getParameterAndDecoded(Constants.RULE_KEY);
if (rule == null || rule.trim().length() == 0) {
......@@ -99,7 +102,7 @@ public class ConditionRouter implements Router, Comparable<Router> {
result.add(invoker);
}
}
if (result.size() > 0) {
if (result.size() > 0 || force) {
return result;
}
} catch (Throwable t) {
......
......@@ -102,5 +102,33 @@ public class ConditionRouterTest {
Assert.assertEquals(invoker2, fileredInvokers.get(0));
Assert.assertEquals(invoker3, fileredInvokers.get(1));
}
@Test
public void testRoute_NoForce(){
Router router = new ConditionRouterFactory().getRouter(getRouteUrl("host = " + NetUtils.getLocalHost() + " => " + " host = 1.2.3.4"));
List<Invoker<String>> invokers = new ArrayList<Invoker<String>>();
Invoker<String> invoker1 = new MockInvoker<String>(URL.valueOf("dubbo://10.20.3.3:20880/com.foo.BarService")) ;
Invoker<String> invoker2 = new MockInvoker<String>(URL.valueOf("dubbo://" + NetUtils.getLocalHost() + ":20880/com.foo.BarService")) ;
Invoker<String> invoker3 = new MockInvoker<String>(URL.valueOf("dubbo://" + NetUtils.getLocalHost() + ":20880/com.foo.BarService")) ;
invokers.add(invoker1);
invokers.add(invoker2);
invokers.add(invoker3);
List<Invoker<String>> fileredInvokers = router.route(invokers, URL.valueOf("consumer://" + NetUtils.getLocalHost() + "/com.foo.BarService"), new RpcInvocation());
Assert.assertEquals(invokers, fileredInvokers);
}
@Test
public void testRoute_Force(){
Router router = new ConditionRouterFactory().getRouter(getRouteUrl("host = " + NetUtils.getLocalHost() + " => " + " host = 1.2.3.4").addParameter(Constants.FORCE_KEY, String.valueOf(true)));
List<Invoker<String>> invokers = new ArrayList<Invoker<String>>();
Invoker<String> invoker1 = new MockInvoker<String>(URL.valueOf("dubbo://10.20.3.3:20880/com.foo.BarService")) ;
Invoker<String> invoker2 = new MockInvoker<String>(URL.valueOf("dubbo://" + NetUtils.getLocalHost() + ":20880/com.foo.BarService")) ;
Invoker<String> invoker3 = new MockInvoker<String>(URL.valueOf("dubbo://" + NetUtils.getLocalHost() + ":20880/com.foo.BarService")) ;
invokers.add(invoker1);
invokers.add(invoker2);
invokers.add(invoker3);
List<Invoker<String>> fileredInvokers = router.route(invokers, URL.valueOf("consumer://" + NetUtils.getLocalHost() + "/com.foo.BarService"), new RpcInvocation());
Assert.assertEquals(0, fileredInvokers.size());
}
}
\ No newline at end of file
......@@ -373,6 +373,8 @@ public class Constants {
public static final String FORCE_PREFIX = "force:";
public static final String FORCE_KEY = "force";
public static final String MERGER_KEY = "merger";
public static final String TPS_MAX_KEY = "tps.max";
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册