go-zero中使用etcd

1. 运行环境

win10版本开发环境64位使用的go SDK是1.19.5版本

2. 问题描述?

描述:

参考go-zero.dev网站,使用goctl工具创建了api和rpc服务;进行rpc的开发中参考goctl生成的Ping的代码话,使用xxxclient目录下的rpc客户端构建客户访问程序,(这是是在internel的server注册函数,使用XXXclient调用,在本机实现);编写测试程序,可以返回rpc请求的数据(没有鉴权出处理,直接连接),测试程序返回数据如下图所示pong和一个结构体数组数据,后者来源于数据库查询。

go-zero中使用etcd

问题:

直接连接可以访问后就像添加服务注册与发现功能基于etcd实现。查阅资料了解到zero集成了etcd;直接使用自动构建的Ping方法是实现代码如下:

func GetRpcClientPing() (string, error) {
    c, err := zrpc.NewClient(zrpc.RpcClientConf{
        //Target: "127.0.0.1:9000",
        Etcd: discov.EtcdConf{
            Hosts: []string{"localhost:2379"},
            Key:   "rpcservice.rpc",
        },
    })
    if err != nil {
        return "", err
    }
    r := rpcserviceclient.NewRpcservice(c)
    r2, err := r.Ping(context.Background(), &rpcservice.Request{ReqJson: "xiaoxu"})
    if err != nil {
        return "", errors.New("rpc method anlyse failed")
    }
    return r2.ResJson, nil

}

通过Etcd来配置etcd服务器,也启动了etcd服务器

go-zero中使用etcd

到这一步启动rpc服务器却报错,报错如下

go-zero中使用etcd

etcd://localhost:2379/rpcservice.rpc, error: context deadline exceeded, make sure rpc service "rpcservice.rpc" is already started
go
讨论数量: 2

没有注册到etcd中,检查etcd是否启动,以及http,rpc服务是否填写正确etcd地址是否能通信

1年前 评论
programer_xu (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!