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
推荐文章: