服务过滤
Kitex 提供了基于规则的解析器,允许用户过滤服务实例。
概述
Kitex 拓展 resolver-rule-based 提供了一个基于规则的解析器。它允许用户配置规则以过滤服务发现中的服务实例,实现流量切分的功能。
这个解析器需要一个已实现的 Resolver,能够从注册中心解析实例,同时还需要一些定制化的过滤规则(例如,在实例中根据标签进行过滤)。
功能特性
-
支持自定义过滤规则,能够基于实例的标签或其他元数据进行筛选。
-
支持顺序执行多个过滤函数,灵活定义服务解析的逻辑。
用法
-
实现你自己的解析器。参考这个文档关于解析器的定义: 服务发现扩展
-
定义过滤规则。
// 定义一个过滤函数 // 例如,只获取具有标签 {"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 将按顺序执行。
-
配置解析器
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 。
最后修改
October 24, 2024
: doc(kitexcall): add include path for idl & add -e option (#1161) (f055699)