golang etcd clientv3踩坑,rpc error: code = 1 desc = "context canceled"以及github.com\coreos\etcd@v3.3...

哆啦在这A梦在哪 · · 1385 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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里面的讨论


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1385 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传