Высокое время ожидания До получения ответа или превышения срока контекста Go-Micro - PullRequest
1 голос
/ 08 ноября 2019

У меня есть клиент grpc, написанный с использованием go-micro, который выполняет вызов grpc microservice, который далее подключается к эластичному поиску для получения результата поиска.

Мой веб-сервис, в котором я создаю свой grpcклиент и служба grpc, подключающиеся кasticsearch, регистрируются в одном и том же консуле реестра (включено для настройки TLS).

Но когда клиент пытается вызвать службу grpc, иногда запрос выполняется успешно, но иногда превышается время ожидания контекста.

Я не уверен, тратит ли консул время для возврата служебной информации, или это проблема соединения с эластичным поиском, или проблема с клиентом grpc.

Пожалуйста, помогите Я застрялпо этому вопросу так долго. Заранее спасибо.

Я попытался изменить размер пула соединений для моего клиента grpc. Я попытался увеличить ttl реестра, время ожидания реестра, но ничего не работает.

consul "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)
}

Если я раскомментирую время ожидания, я получуошибка наблюдения консула, которая при проверке работоспособности службы (тайм-аут запроса) (возможно, из-за блокировки запроса).

// 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, но у меня истек срок выполнения контекста

...