---------------
最近在用Etcd做服务注册和发现的时候发现了一些问题,一直没有头绪,希望各位大佬给点建议,下面直接上代码(逻辑代码已删除)
```golang
resp, err := sdk.client.Grant(context.TODO(), 60)
if err != nil {
log4.Info(" createServerInfo %s Grant error [%v]", pull_path, err)
return err
}
_, err = sdk.client.Put(context.TODO(), pull_path, string(data), etcd.WithLease(resp.ID))
if err != nil {
log4.Info("createServerInfo %s Put error [%v]", pull_path, err)
return err
}
ctx, cancelFunc := context.WithCancel(context.TODO())
ch, err := sdk.client.KeepAlive(context.TODO(), resp.ID)
if err != nil {
log4.Info(" createServerInfo %s KeepAlive error [%v]", pull_path, err)
return err
}
```
我对`KeepAlive`返回的channel做了监听,如果channel关闭会重新注册该路径,但是做压测是时候发现,在服务注册量很大的时候(>1W+),这个channel会一直频繁被关闭,导致服务一直重新注册~ 请问大家有什么解决办法嘛
keepalive请求过多,导致网络IO阻塞,在firsttimeout为5秒的情况下无法正常返回KeepAliveResponse,将ETCD 客户端里的超时时间设置高点就可以了
#1