加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
grpc_resolver.go 1009 Bytes
一键复制 编辑 原始数据 按行查看 历史
lukeaxu 提交于 2023-11-10 13:14 . etcd implement
package discover
import (
"context"
"time"
"github.com/lukeaxu/discover/registry"
"google.golang.org/grpc/resolver"
)
type grpcResolver struct {
cc resolver.ClientConn
registry registry.Registry
target resolver.Target
timeout time.Duration // 解析的最大延迟
close chan struct{}
}
func (g *grpcResolver) ResolveNow(resolver.ResolveNowOptions) {
g.resolveNow()
}
func (g *grpcResolver) resolveNow() {
ctx, cancel := context.WithTimeout(context.Background(), g.timeout)
defer cancel()
services, err := g.registry.ListServices(ctx, g.target.Endpoint())
if err != nil {
g.cc.ReportError(err)
return
}
addresses := make([]resolver.Address, len(services))
for i, service := range services {
addresses[i] = resolver.Address{
Addr: service.Addr,
}
}
err = g.cc.UpdateState(resolver.State{Addresses: addresses})
if err != nil {
g.cc.ReportError(err)
return
}
}
func (g *grpcResolver) Close() {
close(g.close)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化