dubbo2 协议路由

类别属性
路由路由匹配

功能描述

路由是完成网关转发步骤的第一步,该路由类型能使网关可接收dubbo2请求并匹配到目标服务。

路由匹配规则

路由可配置两种指标,分别是service_name + method_name、header。

指标匹配顺序

优先级递减 分别是service_name + method_name -> header(key根据单词字母升序进行排序)

指标值匹配规则

匹配类型规则说明
全等匹配str值存在,且与str完全相等
前缀匹配str*值存在,且str是值的前缀
后缀匹配*str值存在,且str是值的后缀
子串匹配*str*值存在,且str是值的子串
非等匹配!=str值存在,且值不等于str时匹配成功
空值匹配$要求key存在且值为空值,多用于header、query指标
存在匹配**要求key存在但不能为空值,多用于header、query指标
不存在匹配!要求key不存在,多用于header、query指标
区分大小写的正则匹配~=str值符合正则匹配
不区分大小写的正则匹配~*=str值符合正则匹配
任意匹配*任何情况都匹配成功

优先级:全等匹配 > 前缀匹配 > 后缀匹配 > 子串匹配 > 非等匹配 > 空值匹配 > 存在匹配 > 不存在匹配 > 区分大小写的正则匹配 > 不区分大小写的正则匹配 > 任意匹配

以上所有匹配规则仅支持service_name+method_name、header的字符串值。

配置说明

路由需要绑定服务,因此在创建路由前,需要确保上游服务已经存在,上游服务的配置教程点此进行跳转

配置参数说明

参数名值类型是否必填值可能性默认值说明
namestring路由名称,格式:支持英文、数字、下划线
driverstringdubbo2
listenint路由监听端口,需要和启动时配置的config.yml文件配合使用,当定义该文件未监听的端口时,该监听无效
method_namestringGetUser服务的方法名,不填只匹配服务名
service_namestringapi.UserService服务名
rulesarray_object匹配参数规则,支持header
rules -> typestringheader参数类型
rules -> namestring参数名
rules -> valuestring参数值
servicestring服务id
templatestring插件模版id
disableboolfalse是否禁用路由
pluginsarray_object插件列表
retryint0超时重试次数
time_outint0超时时间,当为0时不设置超时,单位:ms
descriptionstring路由描述

备注

  • plugins具体配置点此进行跳转。

返回参数说明

参数名类型是否必含说明
idstring实例id
namestring实例名
driverstring驱动名
descriptionstring描述
professionstring模块名
createstring创建时间
updatestring更新时间
disablebool禁用路由
listenint监听端口
method_namestring服务的方法名
service_namestring服务名
rulesarray_object规则列表
targetstring目标服务
pluginsobject插件配置

备注:返回体内的rules参考请求配置参数,在此不再赘述。

创建规则较复杂的路由

备注:已经存在id为anonymous_service@service的服务。

curl -X POST  \
  'http://127.0.0.1:9400/api/router' \
  -H 'Content-Type:application/json' \
  -d '{
	"name": "complex_router",
	"driver": "dubbo2",
	"description": "一个匹配规则较复杂的路由",
	"listen": 8099,
	"method_name": "GetUser",
	"service_name": "api.UserService",
	"rules": [
	  {
	    "type":"header",
	    "name":"group",
	    "value":"apinto"
	  }
	],
	"service": "anonymous_service@service",
	"template": ""
}'

#当dubbo2请求同时满足以下条件时才能匹配这个路由
#service_name为api.UserService
#method_name为GetUser
#dubbo2协议中的Attachment中包含group且值为apinto

注意:该路由内配置的监听端口listen必须在config.yml配置文件里的监听端口列表中存在。

返回结果示例

{
  "create": "2022-06-16 12:06:05",
  "description": "一个匹配规则较复杂的路由",
  "disable": false,
  "driver": "dubbo2",
  "id": "complex_router@router",
  "listen": 8099,
  "service_name": "api.UserService",
  "method_name": "GetUser",
  "name": "complex_router",
  "plugins": null,
  "profession": "router",
  "rules": [
    {
      "type": "header",
      "name": "group",
      "value": "apinto"
    }
  ],
  "service": "anonymous_service@service",
  "template": "",
  "update": "2022-06-16 12:06:05"
}

配置dubbo2路由

备注:已经存在id为anonymous_service@service的服务。

curl -X POST  \
  'http://127.0.0.1:9400/api/router' \
  -H 'Content-Type:application/json' \
  -d '{
	"name": "simple_router",
	"driver": "dubbo2",
	"description": "一个匹配规则较简单的路由",
	"listen": 8099,
	"service_name": "api.UserService",
    "method_name": "GetUser",
	"rules": [],
	"service": "anonymous_service@service",
	"template":""
}'

#当dubbo2请求同时满足以下条件时才能匹配这个路由
#service_name为api.UserService
#method_name为GetUser

注意:该路由内配置的监听端口listen必须在config.yml配置文件里的监听端口列表中存在。

gateway: # 网关服务配置
  listen_urls: # 监听地址
    - tcp://0.0.0.0:8099

返回结果示例

{
  "create": "2022-06-16 12:13:40",
  "description": "一个匹配规则较简单的路由",
  "disable": false,
  "driver": "dubbo2",
  "id": "simple_router@router",
  "listen": 8099,
  "service_name": "api.UserService",
  "method_name": "GetUser",
  "name": "simple_router",
  "plugins": null,
  "profession": "router",
  "rules": [],
  "service": "anonymous_service@service",
  "template": "",
  "update": "2022-06-16 12:13:40"
}