动态路由

Dubbo 分类

Dubbo当前常用的有2个分支版本,一个是apache dubbo(GroupID是org.apache.dubbo), 一个是dubbox (GroupID是com.alibaba)。两个分支的dubbo,对应不同的接入插件,大家接入之前可以先通过GroupID判断下当前项目依赖的是哪个分支的dubbo。

Apache Dubbo

引入依赖

首先,动态路由需要依赖以下2个插件,需要将2个插件引入POM中,插件版本建议使用源码库的最新版本:release

  • com.tencent.polaris:dubbo-router-polaris:北极星动态路由插件
  1. <dependency>
  2. <groupId>com.tencent.polaris</groupId>
  3. <artifactId>dubbo-router-polaris</artifactId>
  4. <version>${latest_version}<version>
  5. </dependency>

配置北极星注册中心地址

注册中心地址配置可参考:服务注册

使用动态路由能力

*** 说明 ***

动态路由可以实现基于dubbo的请求消息内容来对请求调度到不同的实例分组,比如将带了某些user标签的请求调度到灰度分组。

当前支持针对dubbo消息的以下内容进行路由调度:

消息类型dubbo消息内容路由规则请求类型
消息头attachment请求头(HEADER)
RPC方法method路径(PATH)

*** 配置路由规则 ***

配置自定义路由规则,指定带有附件user为archer的请求,路由到版本1.0.0的实例上。

动态路由 - 图1

执行服务调用,调用时,需要设置一下当前请求的attachement。

  1. // 设置attachment,指定当前用户
  2. RpcContext.getContext().setAttachment("user", userName);
  3. String message = service.sayHello("hello");
  4. System.out.printf("message from %s is %s%n", userName, message);

样例

动态路由样例包括3个工程,代表的是多个服务之间调用,调用链路为:front->middle->back。