Documentation
¶
Overview ¶
Package sdbridge 提供服务发现适配器的框架无关共享核心。
registry/{kitex,hertz} 与 nns/{kitex,hertz} 共 4 个 Resolver 适配器的 "拉取 + 校验 + 错误包装" 骨架、Hertz 服务描述中的 "?tags" 后缀解析、 实例列表校验与注册信息转换,原先各自拷贝一份;本包将其下沉为唯一实现, 各框架适配层只保留实例类型转换(kitex 仓 kitex/registry 与 hertz 仓 hertz/registry 的 convert.go) 与框架 Result 组装的薄壳。
本包只允许 import 标准库与 ekit/registry(oekit 平台契约 github.com/oekit/oekit.github.io/blob/main/docs/PLATFORM_CONTRACT.md), 禁止依赖 Hertz/Kitex 等具体框架。
用法(框架适配层侧) ¶
core := sdbridge.NewResolverCore(fetch, "ekit", "kitex resolver",
sdbridge.WithFetchErr(sdbridge.DiscoverFetchErr))
insts, err := core.Fetch(ctx, service) // 拉取 + 校验 + 统一错误前缀
Index ¶
- func DiscoverFetchErr(errPrefix, service string, err error) error
- func PlainFetchErr(errPrefix, _ string, err error) error
- func ServiceNameFromDesc(desc string) string
- func ToInstance(name string, addr net.Addr, weight, defaultWeight int, tags map[string]string) (registry.Instance, error)
- func Validate(instances []registry.Instance, service string) ([]registry.Instance, error)
- type FetchErrFunc
- type FetchFunc
- type ResolverCore
- type ResolverCoreOption
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DiscoverFetchErr ¶
DiscoverFetchErr 返回 "<errPrefix>: discover <service>: <err>" 格式的错误 (registry 系适配器风格,附加服务名与动词)。
func PlainFetchErr ¶
PlainFetchErr 返回 "<errPrefix>: <err>" 格式的错误(nns 系适配器风格, 数据源错误已自带服务上下文,不再重复服务名)。
func ServiceNameFromDesc ¶
ServiceNameFromDesc 去掉 Hertz 服务描述中的 "?tags" 后缀,返回纯服务名。
Hertz 的缓存 key(由 registry.EncodeTargetTags 编码)形如 "host?k=v", 而服务发现只认服务名,解析逻辑原先在 hertz/registry 与 hertz/nns 各拷贝一份。
func ToInstance ¶
func ToInstance(name string, addr net.Addr, weight, defaultWeight int, tags map[string]string) (registry.Instance, error)
ToInstance 从框架注册信息的通用字段构造 registry.Instance, weight <= 0 时使用 defaultWeight 兜底。内部委托 registry.InfoFrom, 作为 4 个 registry.go 适配文件权重兜底逻辑的唯一入口。
func Validate ¶
Validate 校验实例列表:空列表返回包装了 registry.ErrNoInstances 的错误 (可通过 errors.Is 判定),非空列表原样返回。
错误消息为 "no instances for %q",不含前缀——由调用方(如 ResolverCore.Fetch) 按需附加各自的 resolver 前缀。
Types ¶
type FetchErrFunc ¶
FetchErrFunc 包装实例拉取阶段的错误。
errPrefix 是错误消息前缀,service 是(已剥离 "?tags" 的)服务名, err 是数据源返回的底层错误。
type FetchFunc ¶
FetchFunc 拉取指定服务的实例列表。
各框架适配层将自身的数据源(Discoverer.Discover、nns ServiceClient.GetInstances) 包装为本类型,交给 ResolverCore 统一调度。
type ResolverCore ¶
type ResolverCore struct {
// contains filtered or unexported fields
}
ResolverCore 服务发现解析器的框架无关核心骨架。
封装 registry/{kitex,hertz} 与 nns/{kitex,hertz} 四个 Resolver 适配器共用的 "拉取 + 校验 + 错误包装" 逻辑;框架适配层只负责:
- Target 的框架类型适配;
- 实例列表 → 框架实例类型的转换(InstancesToKitex / InstancesToHertz);
- 框架 Result 的组装(Cacheable/CacheKey 等框架特有字段)。
func NewResolverCore ¶
func NewResolverCore(fetch FetchFunc, name, errPrefix string, opts ...ResolverCoreOption) *ResolverCore
NewResolverCore 创建解析器核心。
fetch 是实例拉取函数;name 是 resolver 名称(Name() 返回值); errPrefix 是错误消息前缀(如 "kitex resolver"),错误格式为 "<errPrefix> ..."(不含尾冒号,冒号由错误格式函数添加)。
func (*ResolverCore) Cacheable ¶
func (c *ResolverCore) Cacheable() bool
Cacheable 报告解析结果是否可被框架缓存。
Kitex Result.Cacheable 恒为 true(lbcache 按 CacheKey 缓存增量 Diff); Hertz 无此字段,忽略。
func (*ResolverCore) Fetch ¶
Fetch 拉取并校验指定服务的实例列表("拉取 + 校验" 公共骨架)。
service 必须是纯服务名(Hertz 场景先用 ServiceNameFromDesc 剥离 "?tags")。 拉取失败返回 fetchErr 定义的格式;实例列表为空返回 "<errPrefix>: no instances for <service>"(errors.Is 可匹配 registry.ErrNoInstances)。
type ResolverCoreOption ¶
type ResolverCoreOption func(*ResolverCore)
ResolverCoreOption 是 ResolverCore 的配置选项函数类型。
func WithFetchErr ¶
func WithFetchErr(fn FetchErrFunc) ResolverCoreOption
WithFetchErr 自定义实例拉取阶段的错误包装格式。 fn 为 nil 时忽略(保持默认 PlainFetchErr)。