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和一个结构体数组数据,后者来源于数据库查询。
问题:
直接连接可以访问后就像添加服务注册与发现功能基于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服务器
到这一步启动rpc服务器却报错,报错如下
etcd://localhost:2379/rpcservice.rpc, error: context deadline exceeded, make sure rpc service "rpcservice.rpc" is already started
没有注册到etcd中,检查etcd是否启动,以及http,rpc服务是否填写正确etcd地址是否能通信