etcd 错误:超出上下文截止日期
etcd err: context deadline exceeded
当我使用 shell 时 returns 好的,
但是当我使用 golang 时 returns err: context deadline exceeded
.
为什么?
package main
import (
"context"
"fmt"
"go.etcd.io/etcd/clientv3"
"time"
)
func main() {
cli,err := clientv3.New(clientv3.Config{
Endpoints: []string{"http://192.168.11.34:2379"},
DialTimeout: 5*time.Second,
})
if err != nil{
panic(err)
}
fmt.Println("connect etcd success!")
defer cli.Close()
ctx,cancel := context.WithTimeout(context.Background(),time.Second*5)
_,err = cli.Put(ctx,"mac","leave")
defer cancel()
if err !=nil{
fmt.Println("put etcd err:",err.Error())
return
}
}
connect etcd success!
{"level":"warn","ts":"2021-02-08T17:10:46.490+0800","caller":"clientv3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"endpoint://client-5b14f6c4-2395-4a15-9ebb-cadf5985fb06/192.168.11.34:2379","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = latest balancer error: all SubConns are in TransientFailure, latest connection error: connection error: desc = \"transport: Error while dialing dial tcp 192.168.11.34:2379: connect: connection refused\""}
put etcd err: context deadline exceeded
客户端的创建并不能保证连接的建立。
它可能会延迟到第一个实际失败的请求。
请确保您的服务器可以访问。
增加超时时间:
DialTimeout: 5*time.Second
如果您收到 context deadline exceeded
错误,显然超过了这个时间。
延迟 cancel() 意味着直到您的 Println 和 return(在函数 tear-down 期间)之后上下文才会被取消。如果 Put() 调用处于将导致报告错误的超时期限的边缘。但是在 Put() 调用之后直接调用 cancel() 似乎也有问题(见我最近的问题)
当我使用 shell 时 returns 好的,
但是当我使用 golang 时 returns err: context deadline exceeded
.
为什么?
package main
import (
"context"
"fmt"
"go.etcd.io/etcd/clientv3"
"time"
)
func main() {
cli,err := clientv3.New(clientv3.Config{
Endpoints: []string{"http://192.168.11.34:2379"},
DialTimeout: 5*time.Second,
})
if err != nil{
panic(err)
}
fmt.Println("connect etcd success!")
defer cli.Close()
ctx,cancel := context.WithTimeout(context.Background(),time.Second*5)
_,err = cli.Put(ctx,"mac","leave")
defer cancel()
if err !=nil{
fmt.Println("put etcd err:",err.Error())
return
}
}
connect etcd success!
{"level":"warn","ts":"2021-02-08T17:10:46.490+0800","caller":"clientv3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"endpoint://client-5b14f6c4-2395-4a15-9ebb-cadf5985fb06/192.168.11.34:2379","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = latest balancer error: all SubConns are in TransientFailure, latest connection error: connection error: desc = \"transport: Error while dialing dial tcp 192.168.11.34:2379: connect: connection refused\""}
put etcd err: context deadline exceeded
客户端的创建并不能保证连接的建立。 它可能会延迟到第一个实际失败的请求。
请确保您的服务器可以访问。
增加超时时间:
DialTimeout: 5*time.Second
如果您收到 context deadline exceeded
错误,显然超过了这个时间。
延迟 cancel() 意味着直到您的 Println 和 return(在函数 tear-down 期间)之后上下文才会被取消。如果 Put() 调用处于将导致报告错误的超时期限的边缘。但是在 Put() 调用之后直接调用 cancel() 似乎也有问题(见我最近的问题)