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年前