gRPC 客户端连接
本文介绍如何使用 gRPC 框架进行 gRPC Client 的开发。
准备工作
我们执行 goctl rpc new greet 生成一个 rpc server 服务。
# 创建一个 demo 目录,进入 demo 目录$ mkdir demo && cd demo# 生成一个 greet 服务$ goctl rpc new greet# 新建一个 main.go 文件来创建一个 greet 服务的客户端$ touch main.go直连分为两种模式,一种是直连单个服务,一种是直连服务集群。
地址解析模式
Section titled “地址解析模式”在 main.go 文件中代码如下
func main() { clientConf:=zrpc.RpcClientConf{} conf.FillDefault(&clientConf)// 填充默认值,比如 trace 透传等,参考服务配置说明 clientConf.Target = "dns:///127.0.0.1:8080" conn := zrpc.MustNewClient(clientConf) client := greet.NewGreetClient(conn.Conn()) resp, err := client.Ping(context.Background(), &greet.Request{}) if err != nil { log.Println(err) return } log.Println(resp)}多节点直连模式
Section titled “多节点直连模式”在 main.go 文件中代码如下
func main() { clientConf:=zrpc.RpcClientConf{} conf.FillDefault(&clientConf)// 填充默认值,比如 trace 透传等,参考服务配置说明 clientConf.Endpoints = []string{"127.0.0.1:8080","127.0.0.2:8080"}// 直连集群时,只需要给 Endpoints 配置 rpc server的地址即可 conn := zrpc.MustNewClient(clientConf) client := greet.NewGreetClient(conn.Conn()) resp, err := client.Ping(context.Background(), &greet.Request{}) if err != nil { log.Println(err) return } log.Println(resp)}etcd 服务发现
Section titled “etcd 服务发现”在 main.go 文件中代码如下
func main() { clientConf:=zrpc.RpcClientConf{} conf.FillDefault(&clientConf)// 填充默认值,比如 trace 透传等,参考服务配置说明 clientConf.Etcd = discov.EtcdConf{// 通过 etcd 服务发现时,只需要给 Etcd 配置即可 Hosts: []string{"127.0.0.1:2379"}, Key: "greet.rpc", User: "",// 当 etcd 开启 acl 时才填写,这里为了展示所以没有删除,实际使用如果没有开启 acl 可忽略 Pass: "",// 当 etcd 开启 acl 时才填写,这里为了展示所以没有删除,实际使用如果没有开启 acl 可忽略 CertFile: "",// 当 etcd 开启 acl 时才填写,这里为了展示所以没有删除,实际使用如果没有开启 acl 可忽略 CertKeyFile: "",// 当 etcd 开启 acl 时才填写,这里为了展示所以没有删除,实际使用如果没有开启 acl 可忽略 CACertFile: "",// 当 etcd 开启 acl 时才填写,这里为了展示所以没有删除,实际使用如果没有开启 acl 可忽略 InsecureSkipVerify: false,// 当 etcd 开启 acl 时才填写,这里为了展示所以没有删除,实际使用如果没有开启 acl 可忽略 } conn := zrpc.MustNewClient(clientConf) client := greet.NewGreetClient(conn.Conn()) resp, err := client.Ping(context.Background(), &greet.Request{}) if err != nil { log.Println(err) return } log.Println(resp)}如果你不想使用 go-zero rpc 的 client 进行初始化,zrpc 也支持 grpc.ClientConn 的原生支持,你可以直接使用 grpc.ClientConn 进行初始化。
func main() { conn,err:=grpc.Dial("127.0.0.1:8080",grpc.WithBlock(), grpc.WithTransportCredentials(insecure.NewCredentials())) if err!=nil{ log.Println(err) return } client := greet.NewGreetClient(conn) resp, err := client.Ping(context.Background(), &greet.Request{}) if err != nil { log.Println(err) return } log.Println(resp)}其他服务发现
Section titled “其他服务发现”除了 go-zero 内置的 ectd 作为服务发现外,社区还提供了对 nacos,consul 等的服务发现支持,详情可参考 更多服务发现组件