条件路由规则

条件路由规则将满足特定条件的请求转发到目标实例的子集。规则匹配传入流量的请求参数,满足匹配条件的请求将被转发到包含特定实例地址列表的子集。

以下是一个条件路由规则的示例。

根据以下示例规则,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

您可以参考条件路由的特定示例代码 这里

ConditionRule

条件路由规则的主体定义了路由规则将生效的目标服务或应用程序、流量过滤条件以及特定场景下的行为。

字段类型描述必需
configVersionstring条件规则定义的版本,当前可用版本为 v3.0
scopestring支持 serviceapplication 范围规则。
keystring此规则将应用于的目标服务或应用程序的标识符。

- 如果设置了 scope:service,则 key 应指定为此规则目标控制的 Dubbo 服务键。
- 如果设置了 scope:application,则 key 应指定为此规则目标控制的应用程序的名称,应用程序应始终为 Dubbo 消费者。
enabledbool是否启用此规则,设置 enabled:false 禁用此规则。
conditionsstring[]此配置的条件路由规则定义。有关详细信息,请查看 Condition
forcebool路由后实例子集为空时的行为。true 表示返回无提供者异常,而 false 表示忽略此规则。
runtimebool是否为每次 rpc 调用运行路由规则,或者如果可用则使用路由缓存。

Condition

Condition 充当条件路由规则的主体,类型为字符串,具有复合结构,例如 method=getComment => region=Hangzhou。这里

  • => 符号之前的条件表示请求参数匹配条件。指定的 匹配条件 与消费者的请求上下文 (URL) 甚至方法参数进行比较。当消费者满足匹配条件时,将对消费者应用条件之后的地址子集过滤规则。
  • => 符号之后的条件表示地址子集过滤条件。指定的 过滤条件 与提供者实例地址 (URL) 进行比较。消费者只能访问满足过滤条件的实例,确保流量仅发送到满足条件的地址子集。
    • 如果匹配条件为空,则表示规则适用于所有请求,例如:=> status != staging
    • 如果过滤条件为空,则拒绝来自相应请求的访问,例如:application = product =>

匹配/过滤条件

参数支持

  • 服务调用上下文,例如接口、方法、组、版本等。
  • 请求上下文,例如 attachments[key] = value。
  • 方法参数,例如 arguments[0] = tom。
  • URL 本身的字段,例如协议、主机、端口等。
  • URL 上的附加参数,例如应用程序、组织等。
  • 支持开发者定义的扩展。

条件支持

  • 等号 (=) 表示“匹配”,例如:method = getComment。
  • 不等号 (!=) 表示“不匹配”,例如:method != getComment。

值支持

  • 用逗号 (,) 分隔的多个值,例如:host != 10.20.153.10,10.20.153.11。
  • 以星号 (*) 结尾表示通配符匹配,例如:host != 10.20..
  • 以美元符号 ($) 开头表示引用消费者参数,例如:region = $region。
  • 整数范围,例如:userId = 1~100, userId = 101~。
  • 支持开发者定义的扩展。

上次修改时间:2024 年 1 月 11 日:增强条件路由规则文档 (#2901) (2fe914296a3)