Skip to content

Latest commit

 

History

History
51 lines (39 loc) · 1.79 KB

README_CN.md

File metadata and controls

51 lines (39 loc) · 1.79 KB

基于规则的 Kitex 解析器

English | 中文

这个项目为 Kitex 提供了一个基于规则的解析器。它允许用户在服务发现中配置规则来过滤服务实例,实现流量切分的功能。

这个解析器需要一个已实现的 Resolver,能够从注册中心解析实例,同时还需要一些定制化的过滤规则(例如,在实例中根据标签进行过滤)。

用法

  1. 实现你自己的解析器。参考这个文档关于解析器的定义: 服务发现扩展

  2. 定义过滤规则。

    // 定义一个过滤函数
    // 例如,只获取具有标签 {"k":"v"} 的实例
    filterFunc := func(ctx context.Context, instance []discovery.Instance) []discovery.Instance {
         var res []discovery.Instance
         for _, ins := range instance {
             if v, ok := ins.Tag("k"); ok && v == "v" {
                 res = append(res, ins)
             }
         }
         return res
    }
    // 构造过滤规则
    filterRule := &FilterRule{Name: "rule-name", Funcs: []FilterFunc{filterFunc}} 

    注意:FilterFuncs 将按顺序执行。

  3. 配置解析器

    import (
       ruleBasedResolver "github.com/kitex-contrib/resolver-rule-based"
       "github.com/cloudwego/kitex/client"
       "github.com/cloudwego/kitex/pkg/discovery"
    )
    
    // 实现你的解析器
    var newResolver discovery.Resolver
    
    // 使用 `newResolver` 和 `filterRule` 构造一个 RuleBasedResolver
    tagResolver := ruleBasedResolver.NewRuleBasedResolver(resolver, filterRule)
    
    // 在构建 Kitex 客户端时添加此选项
    opt := client.WithResolver(tagResolver) 

示例

请参考 /demo 获取详情。