2

我有一个使用 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 服务的及时响应,但我得到了超出上下文截止日期

4

0 回答 0