条件路由规则将符合特定条件的请求转发到特定的地址实例子集上。规则首先对发起流量的请求参数进行匹配,符合匹配条件的请求将被转发到包含特定实例地址列表的子集。
以下是一个条件路由规则示例。
基于以下示例规则,所有 org.apache.dubbo.samples.CommentService
服务 getComment
方法的调用都将被转发到有 region=Hangzhou
标记的地址子集。
configVersion: v3.0
scope: service
force: true
runtime: true
enabled: true
key: org.apache.dubbo.samples.CommentService
conditions:
- method=getComment => region=Hangzhou
可以看具体的例子代码: 条件路由
条件路由规则主体。定义路由规则生效的目标服务或应用、流量过滤条件以及一些特定场景下的行为。
字段名 | 类型 | 描述 | 必填 |
---|---|---|---|
configVersion | string | 条件路由的版本,当前版本为 v3.0 | 是 |
scope | string | 支持 service 和 application 两种规则 | 是 |
key | string | 应用到的目标服务或应用程序的标识符 - 当 scope:service 时, key 应该是该规则生效的服务名比如 org.apache.dubbo.samples.CommentService- 当 scope:application 时, then key 应该是该规则应该生效的应用名称,比如说my-dubbo-service. | 是 |
enabled | bool | 规则是否生效 当 enabled:false 时,规则不生效 | 是 |
conditions | string[] | 配置中定义的条件规则,详情可以看条件规则 | 是 |
force | bool | T路由后实例子集为空时的行为。 true 则抛出一个No Provider Exception。 false 则忽略规则,直接去请求其他的实例。默认值是false | 否 |
runtime | bool | 是否为每个 rpc 调用运行路由规则或使用路由缓存(如果可用)。默认值是false(false则走缓存,true不走缓存) | 否 |
Condition
为条件路由规则的主体,类型为一个复合结构的 string 字符串,如 method=getComment => region=Hangzhou
。其中,
匹配条件指定的参数
将与 消费者的请求上下文 (URL)、甚至方法参数
进行对比,当消费者满足匹配条件时,对该消费者执行后面的地址子集过滤规则。过滤条件指定的参数
将与 提供者实例地址 (URL)
进行对比,消费者最终只能拿到符合过滤条件的实例列表,从而确保流量只会发送到符合条件的地址子集。=> status != staging
application = product =>
参数支持
条件支持
值支持