《Apache Dubbo微服务开发从入门到精通》——基于规则的流量治理—— 一、 Dubbo流量治理体系概览(2) https://developer.aliyun.com/article/1224384
2) 条件路由规则
条件路由与标签路由的工作模式非常相似,也是首先对请求中的参数进行匹配,符合匹配条件的请求将被转发到包含特定实例地址列表的子集。相比于标签路由,条件路由的匹配方式更灵活:
• 在标签路由中,一旦给某一台或几台机器实例打了标签,则这部分实例就会被立马从通用流量集合中移除,不通标签之间不会再有交集。有点类似下图,地址集合在输入阶段就已经划分明确。
• 而从条件路由的视角,所有的实例都是一致的,路由过程中不存在分组隔离的问题,每次路由过滤都是基于全量地址中执行
条件路由规则的主体conditions主要包含两部分内容:
• =>之前的为请求参数匹配条件,指定的匹配条件指定的参数将与消费者的请求上下文(URL)、甚至方法参数进行对比,当消费者满足匹配条件时,对该消费者执行后面的地址子集过滤规则。
• =>之后的为地址子集过滤条件,指定的过滤条件指定的参数将与提供者实例地址(URL)进行对比,消费者最终只能拿到符合过滤条件的实例列表,从而确保流量只会发送到符合条件的地址子集。
。 如果匹配条件为空,表示对所有请求生效,如:=> status != staging
。 如果过滤条件为空,表示禁止来自相应请求的访问,如:application = product =>
条件路由规则示例
基于以下示例规则,所有org.apache.dubbo.demo.CommentService服务调用都将被转发到与当前消费端机器具有相同region标记的地址子集。$region是特殊引用符号,执行过程中将读取消费端机器的实际的region值替代。
注:
针对条件路由,我们通常推荐配置scope: service的规则,因为它可以跨消费端应用对所有消费特定服务(service)的应用生效。关于Dubbo规则中的scope以及service、application的说明请阅读 条件路由规则手册一节。
条件路由规则还支持设置具体的机器地址如IP或port,这种情况下使用条件路由可以处理一些开发或线上机器的临时状况,实现黑名单、白名单、实例临时摘除等运维效果,如以下规则可以将机器172.22.3.91从服务的可用列表中排除。
条件路由还支持基于请求参数的匹配,示例如下:
《Apache Dubbo微服务开发从入门到精通》——基于规则的流量治理—— 一、 Dubbo流量治理体系概览(4) https://developer.aliyun.com/article/1224376