美文网首页
golang etcd clientv3踩坑,rpc error

golang etcd clientv3踩坑,rpc error

作者: 哆啦在这A梦在哪 | 来源:发表于2021-02-02 11:15 被阅读0次

golang使用etcd,使用的库为:
github.com/coreos/etcd/clientv3
或者
go.etcd.io/etcd
这两个库其实都是一样的
直接说坑所在,上代码

package main

import (
    "context"
    "log"
    "time"

    "github.com/coreos/etcd/clientv3"
)
func main() {
    conf := clientv3.Config{
        Endpoints:   []string{"127.0.0.1:2379"},
        DialTimeout: 5 * time.Second,
    }
    client, err := clientv3.New(conf)
    if err != nil {
        log.Panic(err)
    }
    defer client.Close()
    kv := clientv3.NewKV(client)
    lease := clientv3.NewLease(client)

    resp, err := lease.Create(context.TODO(), 3)
    if err != nil {
        log.Println("lease.Create:", err)
        return
    }
    kv.Put(context.TODO(), "stb", "jdy", clientv3.WithLease(clientv3.LeaseID(resp.ID)))
}

出现错误

rpc error: code = 1 desc = "context canceled"

注意这里面的一个函数,lease.Create,当使用租约的时候,就出现问题了。而且很多资料里面都是使用和原生一样的grant方法。可是这里只有这么一个create方法。

查看mod版本以及远程v3的版本,果然发现了问题。

image.png
这是本地的版本,直接使用了 go get github.com/coreos/etcd/clientv3
或者
go get go.etcd.io/etcd
他这里默认拉取的是2.3.8,但是看一下远程的地址
https://pkg.go.dev/go.etcd.io/etcd@v2.3.8+incompatible/clientv3?tab=versions
版本已经到了3以上,这个差距太大了吧
试着换成最新的版本
go get github.com/coreos/etcd/clientv3@v3.3.25
出现以下错误
image.png
解决办法就是换一下grpc的版本,资料来源:https://github.com/etcd-io/etcd/issues/11931
执行:go get google.golang.org/grpc@v1.26.0
这时候,再去看执行租约的代码

已经是正常我们熟悉的原生函数名称了
再次执行代码,成功
image.png

总结:
1.不要直接使用go get去获取这个包,要加上最新的版本号,不然拉取的是很老的版本
2.grpc的版本使用1.26.0,详细的去看上述那个issues里面的讨论

相关文章

网友评论

      本文标题:golang etcd clientv3踩坑,rpc error

      本文链接:https://www.haomeiwen.com/subject/uxzetltx.html