Я новичок в etcd
моя цель - следовать
1. служба регистрируется после запуска службы
2. клиент находит службу и вызывает службу
следующий код показывает тест, как найти сервис и вызвать его
func ClientTestService() {
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{endpoint},
DialTimeout: time.Second * 5,
})
if err != nil {
log.Println("connect etcd err:", err.Error())
return
}
defer cli.Close()
r := &naming.GRPCResolver{Client: cli}
b := grpc.RoundRobin(r)
conn, err := grpc.Dial(service_name, grpc.WithBalancer(b), grpc.WithInsecure())
if err != nil {
log.Println("dial err:", err.Error())
return
}
defer conn.Close()
c := calc.NewCalcClient(conn)
req := calc.CalcRequest{IResult: 1, SResult: "req"}
resp, err := c.CalcResult(context.Background(), &req)
if err != nil {
log.Println("calc err:", err)
return
}
log.Println(resp.IResult, resp.SResult)
}
вывод консоли "calc err: ошибка rpc: код = недоступное описание = нет доступного адреса" после выполнения resp, err := c.CalcResult(context.Background(), &req)
это означает, что преобразователь не может найти адрес службы по имени службы
я думаю, есть два возможно
1. сначала нужно запустить службу вызова etcd "прокси-служба" или "шлюз"
2. необходимо получить адрес службы из имени службы вручную
следующий код показывает службу регистрации
func RegisterService(w *sync.WaitGroup) {
w.Add(1)
defer func() {
w.Done()
}()
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{endpoint},
DialTimeout: time.Second * 5,
})
if err != nil {
log.Println("etcd err:", err)
return
}
cli.Delete(cli.Ctx(), service_name)
r := &naming.GRPCResolver{Client: cli}
for _, addr := range GetLocalAddrs() {
service_node := addr + ":" + strconv.Itoa(port)
err = r.Update(cli.Ctx(), service_name, gn.Update{Op: gn.Add, Addr: service_node})
log.Println("register node :", service_name, service_node, err)
}
}
Насколько я понимаю, функция «ClientTestService» подключает сервер etcd и разрешает имя службы в адрес службы и вызывает службу по балансу
, но когда я отлаживаю этот код, а затем нахожу его, просто вызываю etcd по балансу, есть ли функция в etcd для моего необходимость ?
2017-08-13 20:04:22.571628 I | etcdserver/api/v3rpc: transport: http2Server.HandleStreams failed to read frame: read tcp 127.0.0.1:2379->127.0.0.1:49150: read: connection reset by peer]
- person Steven Ferrer   schedule 13.08.2017