Dubbo 路由规则之标签路由

前言

大家好,今天开始给大家分享 — Dubbo 专题之 Dubbo 路由规则之标签路由。在前一个章节中我们介绍了 Dubbo 路由规则之标签路由,以及我们也例举了常见的使用场景并且进行了源码解析来分析其实现原理,同时知道 Dubbo 中标签路由其本质上是通过过滤器对服务提供者列表进行规则的匹配,如果匹配不上则过滤掉服务提供者。那接下来我们解析讨论标签路由,什么是标签路由呢?有什么使用场景呢?下面就让我们快速开始吧!

1. 标签路由简介

首先小伙伴可以通过《Dubbo 路由规则之条件路由》回归一下什么是路由规则?下面我们主要讨论什么标签路由:

标签路由

上图中我们可以看到有两个机房分别是机房A、机房B,其中机房 A 只能访问到 Service A 和 Service B ,而机房B 只能访问到 Service C 和 Service D。要实现上面这种场景我们就需要用到标签路由。从机房 A 发起的调用携带标签 TAG_A 访问到 Service A 和 Service B,而从机房 B 发起的调用携带 TAG_B Service C 和 Service D 。那什么是标签路由呢?

  • 标签路由:以服务提供者应用为粒度配置路由规则,通过将某一个或多个服务的提供者划分到同一个分组,约束流量只在指定分组中流转,从而实现流量隔离的目的,可以作为蓝绿发布、灰度发布等场景的能力基础。标签主要是指对Provider端应用实例的分组,目前有两种方式可以完成实例分组,分别是动态规则打标静态规则打标,其中动态规则相较于静态规则优先级更高,而当两种规则同时存在且出现冲突时,将以动态规则为准。

2. 使用方式

下面我们简单的讨论下标签路由的使用方式:

2.1 标签路由

  • 动态规则打标,可随时在服务治理控制台下发标签归组规则
# demo-provider应用增加了两个标签分组tag1和tag2
  # tag1包含一个实例 127.0.0.1:20880
  # tag2包含一个实例 127.0.0.1:20881
  ---
    force: false
    runtime: true
    enabled: true
    key: demo-provider
    tags:
      - name: tag1
        addresses: ["127.0.0.1:20880"]
      - name: tag2
      addresses: ["127.0.0.1:20881"]
  • 静态打标
 <dubbo:provider tag="tag1"/>

或者

 <dubbo:service tag="tag1"/>

或者

 java -jar xxx-provider.jar -Ddubbo.provider.tag={
   the tag you want, may come from OS ENV}

Tips: 消费端通过编程的方式使用RpcContext.getContext().setAttachment(CommonConstants.TAG_KEY,"TAG_A")请求标签的作用域为每一次 invocation,使用 attachment 来传递请求标签,注意保存在 attachment 中的值将会在一次完整的远程调用中持续传递,得益于这样的特性,我们只需要在起始调用时,通过一行代码的设置,达到标签的持续传递。

  • 字段说明:
编号 字段名称 说明 必填
1 scope 路由规则的作用粒度,scope的取值会决定key的取值。
service 服务粒度 application 应用粒度。
必填
2 Key 明确规则体作用在哪个接口服务或应用。 scope=service时,
key取值为[{group}:]{service}[:{version}]的组合 scope=application时,
key取值为application名称 。
必填
3 enabled enabled=true 当前路由规则是否生效,,缺省生效。 可不填
4 force force=false 当路由结果为空时,是否强制执行,如果不强制执行,
路由结果为空的路由规则将自动失效,缺省为 false
可不填
5 runtime runtime=false 是否在每次调用时执行路由规则,
否则只在提供者地址列表变更时预先执行并缓存结果,
调用时直接从缓存中获取路由结果。如果用了参数路由,必须设为 true
需要注意设置会影响调用的性能,缺省为 false
可不填
6 priority priority=1 路由规则的优先级,用于排序,优先级越大越靠前执行,缺省为 0 可不填
7 tags 定义具体的标签分组内容,可定义任意n(n>=1)个标签并为每个标签指定实例列表。其中name为标签名称 必填

2.2 降级约定

  • request.tag&
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青年IT男

您的打赏就是对我的肯定!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值