go-zero的rpc服务案例解析
go-zero的远程调用服务是基于gRpc的。
zero使用使用gRpc需要安装protoc插件,因为gRpc基于protoc插件使用protocol buffers文件生成rpc服务器和api的代码的。
gRPC 的代码生成还依赖 protoc-gen-go,protoc-gen-go-grpc 插件来配合生成 Go 语言的 gRPC 代码。
goctl env check --install --verbose --force
也可以使用go get命令安装 go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
构建rpc服务:goctl rpc new rpcservice
go-zero.dev官网修改逻辑层代码,如下图所示:
详情请移步官网。
启动rpc服务器:
编写客户端调用方法,其中必要条件为_grpc.pb和pb文件:
将这两个文件复制到新项目中用于构建客户端。
创建客户端实例的代码如下:
//配置连连接参数(无加密) dial, _ := grpc.Dial("localhost:8080", grpc.WithTransportCredentials(insecure.NewCredentials())) defer dial.Close() //创建客户端连接 client := rpcservice.NewRpcserviceClient(dial)
需要的库如下:
import ( "context" "fmt" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" )
客户端实例调用方法:
res, _ := client.Ping(context.Background(), &rpcservice.Request{ Ping: "xiaoxu"})
完整代码如下:
package main import ( "context" "fmt" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "rpcclient/rpcservice" ) func main() { //配置连连接参数(无加密) dial, _ := grpc.Dial("localhost:8080", grpc.WithTransportCredentials(insecure.NewCredentials())) defer dial.Close() //创建客户端连接 client := rpcservice.NewRpcserviceClient(dial) //通过客户端调用方法 res, _ := client.Ping(context.Background(), &rpcservice.Request{ Ping: "xiaoxu"}) fmt.Println(res.Pong) }
启动客户端如下图所示,成功获取服务端方法返回值。
更多信息请移步。
所以在go-zero搭建的服务中,任何具有_grpc.pb和pb文件的项目都可以通过内部方法构建客户端实例从而远程调用服务器的方法。
这里仅仅实现了远程调用没有任何权限认证,grpc有自己的权限认证套件,在后续会继续更新。