我有一个使用 go-micro 编写的 grpc 客户端,它正在调用 grpc 微服务,该微服务进一步连接到弹性搜索以获取搜索结果。
我正在创建我的 grpc 客户端的 Web 服务和连接到 elasticsearch 的 grpc 服务正在注册到同一个注册表领事(启用 TLS 配置)。
但是当客户端尝试调用 grpc 服务时,有时请求会成功,但有时我会超出上下文超时。
我不确定 consul 是否需要时间来返回服务信息,或者是弹性搜索的连接问题,还是 grpc 客户端存在问题。
请帮助我在这个问题上停留了这么久。提前致谢。
我尝试更改我的 grpc 客户端的连接池大小。我尝试增加注册表 ttl ,注册表超时但没有任何效果。
领事“github.com/micro/go-plugins/registry/consul”
// my registry options
func registryOptions(ops *registry.Options) {
//ops.Timeout = time.Second * 30
ops.Secure = true
ops.TLSConfig = &tls.Config{InsecureSkipVerify: true}
ops.Addrs = []string{consulReg}
log.Println("registry options : ", ops)
}
如果我取消注释超时,我会在服务运行状况检查(请求超时)时收到 consul watch 错误(可能是因为阻塞查询)。
// this is my web service
reg = consul.NewRegistry(registryOptions)
// reg := consul.NewRegistry(registryOptions)
//reg.Watch()
service := web.NewService(
web.Name("lena"),
web.Address(serverPort),
web.Advertise(advertize),
//web.RegisterTTL(time.Second*30),
//web.RegisterInterval(time.Second*10),
web.Registry(reg),
)
我也在使用 --registry=consul
这是我调用弹性搜索服务的 grpc 客户端
import(
grpcCl "github.com/micro/go-micro/client/grpc"
"github.com/micro/go-micro/client/selector"
cache "github.com/micro/go-micro/client/selector/registry"
)
Client: grpcCl.NewClient(mclient.PoolSize(100),mclient.RequestTimeout(60*time.Second),mclient.Retries(3),mclient.Selector(cache.NewSelector(selector.Registry(reg))),mclient.Registry(reg)
这是我的弹性搜索客户端 -
import "github.com/olivere/elastic"
elastic.NewClient(
elastic.SetURL(es.Host1, es.Host2, es.Host3))
Grpc 客户端应该得到 grpc 服务的及时响应,但我得到了超出上下文截止日期