# Dubbo标签路由

写在前面,所以分析基于dubbo 2.7.7

# 应用场景

  1. 是否有过这么一个场景,多人协作开发同一个项目,你在进行本地联调的时候,突然有人把自己的服务注册上去了,你就开始到处找始作俑者,好一点的情况是,花了半小时之后,你找到人了,让ta把服务下掉了,你继续联调。那找不到呢?是不是耽误的时间就更长了?
  2. 日常环境已经有一个服务在用了,你本地新开发功能,注册到日常环境,两个服务同时都注册到了zk上,怎么确保你自己的被服务精准调用呢?为了开发测试,本地搭建一套开发环境吗?那多麻烦!
  3. 支持链式调用,假如你自己注册上去了A,C服务,B服务使用注册中心中默认的服务,那么使用标签路由可以在A->B->C的调用过程中,A,C精准调用到你自己的服务。

# 开发使用

# 1. 服务注册

服务注册时,带上tag,这里以test为例

小提示:你可以将test修改为任何你想命名的参数

# 服务级别

单个服务在注册时,在注解上添加tag

 @DubboService(version = "1.0.0", tag = "test")
  public class LineCompareServiceImpl implements LineCompareService {}

# 应用级别

在application.properties中添加配置

dubbo.provider.tag=test

# 2. 服务调用

调用时,在rpc context中带上参数

 RpcContext.getContext().setAttachment("dubbo.tag", "test");

# 规则描述

  1. requestTag=test 时优先选择 tag=test 的 provider。若集群中不存在与请求标记对应的服务,可以降级请求 tag=null 的 provider,即默认 provider。
  2. requestTag=null 时,只会匹配 tag=null 的 provider。即使集群中存在可用的服务,若 tag 不匹配就无法调用,这与规则1不同,携带标签的请求可以降级访问到无标签的服务,但不携带标签/携带其他种类标签的请求永远无法访问到其他标签的服务。

# 背后原理

标签路由

Last Updated: 6/26/2022, 4:44:06 PM