dubbo之路由规则
2017-09-19 21:07
141 查看
向注册中心写入路由规则:(通常由监控中心或治理中心的页面完成)
其中:
condition:// 表示路由规则的类型,支持条件路由规则和脚本路由规则,可扩展,必填。
0.0.0.0 表示对所有IP地址生效,如果只想对某个IP的生效,请填入具体IP,必填。
com.foo.BarService 表示只对指定服务生效,必填。
category=routers 表示该数据为动态配置类型,必填。
dynamic=false 表示该数据为持久数据,当注册方退出时,数据依然保存在注册中心,必填。
enabled=true 覆盖规则是否生效,可不填,缺省生效。
force=false 当路由结果为空时,是否强制执行,如果不强制执行,路由结果为空的路由规则将自动失效,可不填,缺省为flase。
runtime=false 是否在每次调用时执行路由规则,否则只在提供者地址列表变更时预先执行并缓存结果,调用时直接从缓存中获取路由结果。 如果用了参数路由,必须设为true,需要注意设置会影响调用的性能,可不填,缺省为flase。
priority=1 路由规则的优先级,用于排序,优先级越大越靠前执行,可不填,缺省为0。
rule=URL.encode("host = 10.20.153.10 => host = 10.20.153.11") 表示路由规则的内容,必填。
规则:
"=>"之前的为消费者匹配条件,所有参数和消费者的URL进行对比,当消费者满足匹配条件时,对该消费者执行后面的过滤规则。
"=>"之后为提供者地址列表的过滤条件,所有参数和提供者的URL进行对比,消费者最终只拿到过滤后的地址列表。
如果匹配条件为空,表示对所有消费方应用,如:=> host != 10.20.153.11
如果过滤条件为空,表示禁止访问,如:host = 10.20.153.10 =>
表达式:
参数支持:
服务调用信息,如:method, argument 等 (暂不支持参数路由)
URL本身的字段,如:protocol, host, port 等
以及URL上的所有参数,如:application, organization 等
条件支持:
等号
不等号
值支持:
以逗号
以星号
以美元符
示例:
排除预发布机:
白名单: 注意:一个服务只能有一条白名单规则,否则两条规则交叉,就都被筛选掉了)
黑名单:
服务寄宿在应用上,只暴露一部分的机器,防止整个集群挂掉:
为重要应用提供额外的机器:
读写分离:
前后台分离:
隔离不同机房网段:
提供者与消费者部署在同集群内,本机只访问本机的服务:
支持JDK脚本引擎的所有脚本,比如:javascript, jruby, groovy 等,通过 type=javascript 参数设置脚本类型,缺省为javascript。
脚本没有沙箱约束,可执行任意代码,存在后门风险
基于脚本引擎的路由规则,如:
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension(); Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181")); registry.register(URL.valueOf("condition://0.0.0.0/com.foo.BarService?category=routers&dynamic=false&rule=" + URL.encode("http://10.20.160.198/wiki/display/dubbo/host = 10.20.153.10 => host = 10.20.153.11") + "));
其中:
condition:// 表示路由规则的类型,支持条件路由规则和脚本路由规则,可扩展,必填。
0.0.0.0 表示对所有IP地址生效,如果只想对某个IP的生效,请填入具体IP,必填。
com.foo.BarService 表示只对指定服务生效,必填。
category=routers 表示该数据为动态配置类型,必填。
dynamic=false 表示该数据为持久数据,当注册方退出时,数据依然保存在注册中心,必填。
enabled=true 覆盖规则是否生效,可不填,缺省生效。
force=false 当路由结果为空时,是否强制执行,如果不强制执行,路由结果为空的路由规则将自动失效,可不填,缺省为flase。
runtime=false 是否在每次调用时执行路由规则,否则只在提供者地址列表变更时预先执行并缓存结果,调用时直接从缓存中获取路由结果。 如果用了参数路由,必须设为true,需要注意设置会影响调用的性能,可不填,缺省为flase。
priority=1 路由规则的优先级,用于排序,优先级越大越靠前执行,可不填,缺省为0。
rule=URL.encode("host = 10.20.153.10 => host = 10.20.153.11") 表示路由规则的内容,必填。
条件路由规则
基于条件表达式的路由规则,如:host = 10.20.153.10 => host = 10.20.153.11
规则:
"=>"之前的为消费者匹配条件,所有参数和消费者的URL进行对比,当消费者满足匹配条件时,对该消费者执行后面的过滤规则。
"=>"之后为提供者地址列表的过滤条件,所有参数和提供者的URL进行对比,消费者最终只拿到过滤后的地址列表。
如果匹配条件为空,表示对所有消费方应用,如:=> host != 10.20.153.11
如果过滤条件为空,表示禁止访问,如:host = 10.20.153.10 =>
表达式:
参数支持:
服务调用信息,如:method, argument 等 (暂不支持参数路由)
URL本身的字段,如:protocol, host, port 等
以及URL上的所有参数,如:application, organization 等
条件支持:
等号
=表示"匹配",如:host = 10.20.153.10
不等号
!=表示"不匹配",如:host != 10.20.153.10
值支持:
以逗号
,分隔多个值,如:host != 10.20.153.10,10.20.153.11
以星号
*结尾,表示通配,如:host != 10.20.*
以美元符
$开头,表示引用消费者参数,如:host = $host
示例:
排除预发布机:
=> host != 172.22.3.91
白名单: 注意:一个服务只能有一条白名单规则,否则两条规则交叉,就都被筛选掉了)
host != 10.20.153.10,10.20.153.11 =>
黑名单:
host = 10.20.153.10,10.20.153.11 =>
服务寄宿在应用上,只暴露一部分的机器,防止整个集群挂掉:
=> host = 172.22.3.1*,172.22.3.2*
为重要应用提供额外的机器:
application != kylin => host != 172.22.3.95,172.22.3.96
读写分离:
method = find*,list*,get*,is* => host = 172.22.3.94,172.22.3.95,172.22.3.96 method != find*,list*,get*,is* => host = 172.22.3.97,172.22.3.98
前后台分离:
application = bops => host = 172.22.3.91,172.22.3.92,172.22.3.93 application != bops => host = 172.22.3.94,172.22.3.95,172.22.3.96
隔离不同机房网段:
host != 172.22.3.* => host != 172.22.3.*
提供者与消费者部署在同集群内,本机只访问本机的服务:
=> host = $host
脚本路由规则
支持JDK脚本引擎的所有脚本,比如:javascript, jruby, groovy 等,通过 type=javascript 参数设置脚本类型,缺省为javascript。
脚本没有沙箱约束,可执行任意代码,存在后门风险
"script://0.0.0.0/com.foo.BarService?category=routers&dynamic=false&rule=" + URL.encode("function route(invokers) { ... } (invokers)")
基于脚本引擎的路由规则,如:
function route(invokers) { var result = new java.util.ArrayList(invokers.size()); for (i = 0; i < invokers.size(); i ++) { if ("http://10.20.160.198/wiki/display/dubbo/10.20.153.10".equals(invokers.get(i).getUrl().getHost())) { result.add(invokers.get(i)); } } return result; } (invokers); // 表示立即执行方法
相关文章推荐
- 【phpcms-v9】phpcms-v9中url路由规则文件分析:phpcms/libs/classes/param.class.php
- RPC原来就是Socket——RPC框架到dubbo的服务动态注册,服务路由,负载均衡演化
- ASP.NET MVC API 路由生成规则
- thinkphp的URL路由规则与配置实例
- thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成(十五)
- ASP.NET MVC 多路由规则应用一例
- .NET:工作流中如何动态解析路由规则,你肯定用得着
- NET:工作流中如何动态解析路由规则 之 T4 + 动态编译
- JFinal路由规则原理详解
- 15.REST 风格的路由规则
- IIRF 路由规则引起的Bug
- CCNP路由-26 BGP选路规则详解(上)
- dubbo自定义路由规则实际应用
- cisco路由交换的命名规则
- thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成(十五)
- asp.net mvc 通过修改路由规则来实现页面的URL多参数传递
- 【知识库】--Dubbo ReferenceBean获取 -- router路由服务 源码过程(255)
- ci框架中的url路由规则
- Linux 路由 学习笔记 之六 策略规则的添加
- Destoon路由规则