服务路由

服务路由 #

极限网关通过路由来判断流量的去向,一个典型的路由配置示例如下:

router:
  - name: my_router
    default_flow: default_flow
    tracing_flow: request_logging
    rules:
      - method:
          - PUT
          - POST
        pattern:
          - "/_bulk"
          - "/{index_name}/_bulk"
        flow:
          - bulk_process_flow

路由有几个非常重要的概念:

  • flow:请求的处理流程,一个路由里面有三个地方定义 flow
  • default_flow: 默认的处理流,也就是业务处理的主流程,请求转发、过滤、缓存等操作都在这里面进行
  • tracing_flow:用于追踪请求状态的流,不受 default_flow 的影响,用于记录请求日志、统计等
  • rules:根据匹配规则将请求分发到特定的处理流中去,支持请求的 Method、Path 的正则匹配

参数说明 #

名称类型说明
namestring路由名称
default_flowstring默认的请求的处理流程名称
tracing_flowstring用于追踪请求的处理流程名称
rulesarray路由规则列表,按照数组的先后顺序依次应用
rules.methodstring请求的 Method 类型,支持 GETHEADPOSTPUTPATCHDELETECONNECTOPTIONSTRACE* 表示任意类型
rules.patternstring请求的 URL Path 匹配规则,支持通配符,不允许有重叠匹配
rules.flowstring规则匹配之后执行的处理流程,支持多个 flow 组合,依次顺序执行

Pattern 语法 #

语法说明示例
{变量名}带名称的变量/{name}
{变量名:regexp}通过正则来限制变量的匹配规则/{name:[a-zA-Z]}
{变量名:*}匹配之后的任意路径,只允许应用在 Pattern 末尾/{any:*}

更多示例:

Pattern: /user/{user}

 /user/gordon                     match
 /user/you                        match
 /user/gordon/profile             no match
 /user/                           no match

Pattern with suffix: /user/{user}_admin

 /user/gordon_admin               match
 /user/you_admin                  match
 /user/you                        no match
 /user/gordon/profile             no match
 /user/gordon_admin/profile       no match
 /user/                           no match
 
 
Pattern: /src/{filepath:*}

 /src/                     match
 /src/somefile.go          match
 /src/subdir/somefile.go   match

其他注意事项:

  • Pattern 必须是 / 开头
  • 任意匹配只能作为最后的一个规则