二、 条件路由规则
条件路由规则将符合特定条件的请求转发到特定的地址实例子集上。规则首先对发起流量的请求参数进行匹配,符合匹配条件的请求将被转发到包含特定实例地址列表的子集。
以下是一个条件路由规则示例。
基于以下示例规则,所有org.apache.dubbo.samples.CommentService服务getComment方法的调用都将被转发到有region=Hangzhou标记的地址子集。
1. ConditionRule
条件路由规则主体。定义路由规则生效的目标服务或应用、流量过滤条件以及一些特定场景下的行为。
2. Condition
Condition为条件路由规则的主体,类型为一个复合结构的string字符串,如method=getComment => region=Hangzhou。其中:
• =>之前的为请求参数匹配条件,指定的匹配条件指定的参数将与消费者的请求上下文(URL)、甚至方法参数进行对比,当消费者满足匹配条件时,对该消费者执行后面的地址子集过滤规则。
• =>之后的为地址子集过滤条件,指定的过滤条件指定的参数将与提供者实例地址(URL)进行对比,消费者最终只能拿到符合过滤条件的实例列表,从而确保流量只会发送到符合条件的地址子集。
。 如果匹配条件为空,表示对所有请求生效,如:=> status != staging
。 如果过滤条件为空,表示禁止来自相应请求的访问,如:application = product =>
1) 匹配/过滤条件
参数支持
• 服务调用上下文,如:interface,method,group,version等
• 请求上下文,如attachments[key]=value
• 方法参数,如arguments[0]=tom
• URL本身的字段,如:protocol,host,port等
• URL上任务扩展参数,如:application,organization等
• 支持开发者自定义扩展
条件支持
• 等号=表示“匹配”,如:method = getComment
• 不等号!=表示“不匹配”,如:method != getComment
值支持
• 以逗号,分隔多个值,如:host != 10.20.153.10,10.20.153.11
• 以星号*结尾,表示通配,如:host !=10.20.*
• 以美元符开头,表示引用消费者参数,如:region=开头,表示引用消费者参数,如:region = region
• 整数值范围,如:userId=1~100、userId=101~